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中常见的问题:
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