MySQL中常見的函數:mysql
if語句: 格式:IF(Condition,A,B) 說明:當Condition爲TRUE時,返回A;當Condition爲FALSE時,返回B。 case when語句: 舉例: SELECT t.message_id,t.title, CASE WHEN TO_DAYS(t.date)= TO_DAYS(NOW()) THEN '今天' WHEN TO_DAYS(t.date)= (TO_DAYS(NOW())-1) THEN '昨天' ELSE date_format(t.date,'%Y-%m-%d') END AS datestr FROM t_message t 字符串截取/鏈接函數: CONCAT函數: 格式: CONCAT(columnName1,columnName2,'otherString') 說明:返回一個字符串結果,該結果由參數中的值鏈接(不使用分隔符)而成,若是某一個參數爲NULL ,則返回值爲NULL。 GROUP_CONCAT函數: 格式: GROUP_CONCAT(columnName) GROUP_CONCAT(columnName SEPARATOR ';') 說明:返回一個字符串結果,該結果由分組中的(columnName列的)值用分隔符(默認爲英文逗號)拼接而成。 RIGHT函數 格式:right(str, length) 說明:返回字符串str最右面的length個字符。 INSTR函數 格式:INSTR(str,substr) 說明:返回子串substr在字符串str中第一個出現的位置,位置從1開始計算。若在str中找不到substr則返回0。 補充: LOCATE(substr,str,pos):返回子串substr在字符串str中從pos開始第一個出現的位置。若是substr不是在str裏面,返回0。 SUBSTRING函數 格式:substring(str, pos, length); 說明:截取字符串。從pos開始,截取length長度。 字符串替換函數: 舉例:將content字段值中的'{URL}'替換爲download_url字段的值。 select t.id, t.title, replace(content,'{URL}',t.download_url) from t_helpcenter t 時間函數: 函數: NOW() eg:2018-03-19 19:18:55 CURDATE() eg:2018-03-19 DATE_SUB(CURDATE(), INTERVAL 7 day) eg:若今天是2018-03-19,則結果爲2018-03-12 DATE_SUB(CURDATE(), INTERVAL 1 week) eg:若今天是2018-03-19,則結果爲2018-03-12 DATE_SUB(CURDATE(), INTERVAL 1 month) eg:若今天是2018-03-19,則結果爲2018-02-19 DATE_SUB(CURDATE(), INTERVAL 1 year) eg:若今天是2018-03-19,則結果爲2017-03-19 DATE_FORMAT(CURDATE(), '%Y%m') eg:201803 quarter(NOW()) eg:若今天是2018-03-19(3月屬於第1季度),則結果爲1 year(NOW()) eg:2018 舉例: 今天: SELECT * FROM t_advertise_message WHERE TO_DAYS(update_time) = TO_DAYS(NOW()) 昨天: SELECT * FROM t_advertise_message WHERE TO_DAYS(update_time) = TO_DAYS(NOW()) -1 7天內: SELECT * FROM t_advertise_message WHERE DATE(update_time) >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) 本月: SELECT * FROM t_advertise_message WHERE DATE_FORMAT(update_time,'%Y%m') = DATE_FORMAT(CURDATE(),'%Y%m') 本季度:SELECT * FROM t_advertise_message WHERE quarter(update_time) = quarter(NOW()) 本年度:SELECT * FROM t_advertise_message WHERE year(update_time) = year(NOW()) 將字符串轉換爲時間的函數:str_to_date('2000-05-24 14:00:00', '%Y-%m-%d %H:%i:%s')
MySQL中常見的問題:sql
1)MySQL關於查詢條件中:字符串類型的值忽略英文字母的大小寫以及字符串尾部包含空格的問題 舉例:MySQL中執行下面3條查詢語句,查詢出來的結果徹底相同。 SELECT * FROM t_accounts WHERE account= "xiaoning" SELECT * FROM t_accounts WHERE account= "XiaoNing" SELECT * FROM t_accounts WHERE account= "xiaoning " 分析: 1)MySQL對CHAR或VARCHAR類型的值進行比較(=)時,會忽略字符串中英文字母的大小寫以及尾部的空格 2)對CHAR和VARCHAR類型的值進行LIKE查詢時,會忽略英文字母的大小寫,可是不會忽略字符串尾部的空格 解決方案: SELECT * FROM t_accounts WHERE account= BINARY "xiaoning" 或 SELECT * FROM t_accounts WHERE BINARY account= "xiaoning" SELECT * FROM t_accounts WHERE account= BINARY "XiaoNing" 或 SELECT * FROM t_accounts WHERE BINARY account= "XiaoNing" SELECT * FROM t_accounts WHERE account= BINARY "xiaoning " 或 SELECT * FROM t_accounts WHERE BINARY account= "xiaoning " 說明: 1>BINARY不是函數,是類型轉換運算符 2>BINARY強制將後面的字符串轉換爲一個二進制的字符串,能夠理解爲在字符串比較的時候區分英文字母的大小寫以及空格,即精確匹配。 2)對varchar類型的字段和數字進行比較時,mysql會把varchar轉換爲數字: 舉例: 當varchar類型字段的首字符爲非數字時(eg:asdf),該字段會被轉換爲數字0; 當varchar類型字段的首字符爲數字0時(eg:0abcd),該字段會被轉換爲數字0; eg:varchar類型字段=0 只能排除首字符爲非數字0的字符串 同理:varchar類型字段=1 只能排除首字符爲非數字1的字符串 3)在MySQL客戶端中查看MySQL的安裝目錄: SELECT @@basedir AS MySqlDir FROM DUAL