【mysql】 操做 收集持續更新

日期加減天數

MySQL 爲日期增長一個時間間隔:date_add()

now()       //now函數爲獲取當前時間

select date_add(now(), interval 1 day); - 加1天

select date_add(now(), interval 1 hour); -加1小時

select date_add(now(), interval 1 minute); - 加1分鐘

select date_add(now(), interval 1 second); -加1秒

select date_add(now(), interval 1 microsecond);-加1毫秒

select date_add(now(), interval 1 week);-加1周

select date_add(now(), interval 1 month);-加1月

select date_add(now(), interval 1 quarter);-加1季

select date_add(now(), interval 1 year);-加1年

MySQL adddate(), addtime()函數,能夠用date_add() 來替代。

2. MySQL 爲日期減去一個時間間隔:date_sub()

MySQL date_sub() 日期時間函數 和date_add() 用法一致。

MySQL 中subdate(),subtime()函數,建議,用date_sub()來替代。

中文按首字母排序(不區分多音字)html

select Id,`Name` from Area  where `Level`= 4  order by convert(`Name` using gbk) asc

mysql表名區分大小寫java

windows下修改my.ini,配置以下mysql

[mysqld]
lower_case_table_names=2

注:Linux爲0git

一個字段可能對應多條數據,用mysql實現將多行數據合併成一行數據sql

GROUP_CONCAT(Name SEPARATOR ',')

需注意:數據庫

1.GROUP_CONCAT()中的值爲你要合併的數據的字段名;windows

 SEPARATOR 函數是用來分隔這些要合併的數據的;函數

 ' '中是你要用哪一個符號來分隔;post

2.必需要用GROUP BY 語句來進行分組管理,否則全部的數據都會被合併成一條記錄spa

根據經緯度計算兩點間的距離

CREATE  FUNCTION `fnGetDistance`(`longitude1` DECIMAL(10,7),`latitude1` DECIMAL(10,7),`longitude2` DECIMAL(10,7),`latitude2` DECIMAL(10,7)) RETURNS bigint(20)
BEGIN
    DECLARE Distance REAL DEFAULT 0;
        SET Distance = ROUND(6378.137*2*ASIN(SQRT(POW(SIN((latitude1*PI()/180-latitude2*PI()/180)/2),2)+COS(latitude1*PI()/180)*COS(latitude2*PI()/180)*POW(SIN((longitude1*PI()/180-longitude2*PI()/180)/2),2)))*1000);
        RETURN Distance; 
END

 

修改使用子查詢賦值

update `Menu` set ParentId=(select p.id from (SELECT id from `Menu` where MenuName='業務') p) where MenuName='視頻';

模糊搜索 經常使用的一共有4個方法,以下

1. 使用locate()方法

        1.1.普通用法:

              SELECT `column` from `table` where locate('keyword', `condition`)>0

         相似於 java 的 indexOf();不過 locate() 只要找到返回的結果都大於0(即便是查詢的內容就是最開始部分),沒有查找到才返回0;

        1.2. 指定其實位置:

               SELECT LOCATE('bar', 'foobarbar',5);  --> 7 (從foobarbar的第五個位置開始查找)

2.使用instr()函數 (聽說是locate()的別名函數)

       SELECT `column` from `table` where instr(`condition`, ‘keyword’ )>0

       惟一不一樣的是 查詢內容的位置不一樣,見SQL語句中過的keyword

3.使用position()方法,(聽說也是locate()方法的別名函數,功能同樣) 

         SELECT `column` from `table` where position(‘keyword’ IN `condition`)

         不過它再也不是經過返回值來判斷,而是使用關鍵字 in

4.使用find_in_set()函數

       如: find_in_set(str,strlist),strlist必需要是以逗號分隔的字符串

    若是字符串str是在的strlist組成的N子串的字符串列表,返回值的範圍爲1到N

SQL> SELECT FIND_IN_SET('b','a,b,c,d'); +---------------------------------------------------------+ | SELECT FIND_IN_SET('b','a,b,c,d') | +---------------------------------------------------------+ | 2 | +---------------------------------------------------------+ 1 row in set (0.00 sec)

總結: locate、position 和 instr 的差別只是參數的位置不一樣,同時locate 多一個起始位置的參數外,二者是同樣的。

         find_in_set()是個比較特殊的存在,但它們都是返回要查找的子字符串 在 指定字符串中的位置。

         速度上前3個比用 like 稍快了一點。(不過這四個函數都不能使用索引,這是個遺憾)

 

出現中文亂碼解決:

修改my.ini文件,添加以下配置

[client]
default-character-set=utf8

[mysqld]
default-storage-engine=INNODB
character-set-server=utf8
collation-server=utf8_general_ci

中文亂碼參考:http://www.cnblogs.com/songdada119/p/5923219.html

添加數據庫報錯:[Err] 1366 - Incorrect string value: '\xE4\xBB\x8E\xE5\x85\xA5...' for column 'name' at row 1,這樣由於添加數據中存在中文

解決:檢查當前字段字符集格式

相關文章
相關標籤/搜索