SQL单行函数

单行函数

1.字符串函数
函数示例结果描述
upperselect upper('sdfd');SDFD将字母转换为大写
lowerselect lower('ABc');abc将字母转换为小写
concatselect concat('hello', 'world');‘hello world’字符串连接
substr/substringselect substr('hello world', 2, 4);‘ello’截取字符串
lengthselect length('hello world');11获取字符串长度
instrselect instr('hello world', 'world');7获取子字符串在父字符串中的索引
trimselect trim(' hello ');‘hello’去除两端空格
ltrimselect ltrim(' hello');‘hello’去除左端的空格
rtrimselect rtrim('hello ');‘hello’去除右端的空格
replaceselect replace('hello java', 'java', 'world');‘hello world’替换文本
2.数学函数
函数示例结果作用
round(x, [y])select round(5.64,1);5.6对指定的值进行四舍五入,可以指定数值位数y
truncateselect truncate(5.6,0);5对指定的数进行截取操作,指定保留位数y
ceil(x)select ceil(4.56);5返回不小于指定的值x的最小整数,向上取整
floor(x)select floor(8.5);8返回不大于指定的值x的最大整数,向下取整
abs(x)select abs(-12);12取绝对值
3.日期函数
函数示例结果作用
current_timestamp()select current_timestamp();2019-11-07 20:53:47获取当前时间戳
current_date()/CURDATE()select current_date();2019-11-07获取当前日期
current_time()/CURTIME()select current_time();20:56:00获取当前时间
now()select now();2019-11-07 20:57:15获取当前时间
ADDDATE(d,n)SELECT ADDDATE("2017-06-15", INTERVAL 10 DAY);2017-06-25计算起始日期d加上n天的日期
ADDTIME(t,n)SELECT ADDTIME('2011-11-11 11:11:11', 5);2011-11-11 11:11:16时间t加上时间表达式n
DATEDIFF(d1,d2)SELECT DATEDIFF('2001-01-01','2001-02-02');-32计算日期d1-d2之间相隔的天数
DATE_ADD(d,INTERVAL expr type)SELECT DATE_ADD("2017-06-15", INTERVAL 10 DAY);2017-06-25计算起始日期d加上一个时间段后的日期
DATE_SUB(date,INTERVAL expr type)SELECT DATE_SUB("2017-06-15", INTERVAL 10 DAY);2017-06-05计算起始日期d减去一个时间段后的日期
DATE_FORMAT(d,f)SELECT DATE_FORMAT('2011-11-11 11:11:11','%Y-%m-%d %r');2011-11-11 11:11:11 AM按表达式f的要求显示日期d
DAY(d)SELECT DAY("2017-06-15");15返回日期值d的日期部分
DAYNAME(d)SELECT DAYNAME('2011-11-11 11:11:11');Friday返回日期d是星期几,如Monday,Tuesday
函数示例结果作用
DAYOFMONTH(d)SELECT DAYOFMONTH(‘2011-11-11 11:11:11’)11计算日期 d 是本月的第几天
DAYOFWEEK(d)SELECT DAYOFWEEK(‘2011-11-11 11:11:11’)6日期 d 今天是星期几,1 星期日,2 星期一,以此类推
DAYOFYEAR(d)SELECT DAYOFYEAR(‘2011-11-11 11:11:11’)315计算日期 d 是本年的第几天
EXTRACT(type FROM d)SELECT EXTRACT(MINUTE FROM ‘2011-11-11 11:11:11’)11从日期 d 中获取指定的值,type 指定返回的值。
FROM_DAYS(n)SELECT FROM_DAYS(1111)0003-01-16计算从 0000 年 1 月 1 日开始 n 天后的日期
HOUR(t)SELECT HOUR(‘1:2:3’)1返回 t 中的小时值
LAST_DAY(d)SELECT LAST_DAY(“2017-06-20”)2017-06-30返回给给定日期的那一月份的最后一天
MAKEDATE(year, day-of-year)SELECT MAKEDATE(2017, 3)2017-01-03基于给定参数年份 year 和所在年中的天数序号 day-of-year 返回一个日期
MINUTE(t)SELECT MINUTE(‘1:2:3’)2返回 t 中的分钟值
MONTHNAME(d)SELECT MONTHNAME(‘2011-11-11 11:11:11’)November返回日期当中的月份名称,如 November
MONTH(d)SELECT MONTH(‘2011-11-11 11:11:11’)11返回日期 d 中的月份值,1 到 12
QUARTER(d)SELECT QUARTER(‘2011-11-11 11:11:11’)4返回日期 d 是第几季节,返回 1 到 4
SECOND(t)SELECT SECOND(‘1:2:3’)3返回 t 中的秒钟值
函数示例结果作用
SUBDATE(d,n)SELECT SUBDATE(‘2011-11-11 11:11:11’, 1)2011-11-10 11:11:11日期 d 减去 n 天后的日期
WEEK(d)SELECT WEEK(‘2011-11-11 11:11:11’)45计算日期 d 是本年的第几个星期,范围是 0 到 53
WEEKDAY(d)SELECT WEEKDAY(“2017-06-15”)3日期 d 是星期几,0 表示星期一,1 表示星期二
WEEKOFYEAR(d)SELECT WEEKOFYEAR(‘2011-11-11 11:11:11’)45计算日期 d 是本年的第几个星期,范围是 0 到 53
YEARWEEK(date, mode)SELECT YEARWEEK(“2017-06-15”)201724返回年份及第几周(0到53),mode 中 0 表示周天,1表示周一,以此类推

type 值可以是**😗*

  • MICROSECOND 微秒
  • SECOND 秒
  • MINUTE 分钟
  • HOUR 小时
  • DAY 天
  • WEEK 周
  • MONTH 月
  • QUARTER 季度
  • YEAR 年
  • MINUTE_SECOND 分钟:秒
  • HOUR_SECOND 小时:分钟 : 秒
  • HOUR_MINUTE 小时:分钟
  • DAY_SECOND 天 小时:分钟:秒DAY_MINUTE 天 小时:分钟
  • DAY_HOUR 天 小时
  • YEAR_MONTH 年-月
  • 可以被用在format字符串**😗*
  • %M 月名字(January……December)
  • %W 星期名字(Sunday……Saturday)
  • %D 有英语前缀的月份的日期(1st, 2nd, 3rd, 等等。)
  • %Y 年, 数字, 4 位
  • %y 年, 数字, 2 位
  • %a 缩写的星期名字(Sun……Sat)
  • %d 月份中的天数, 数字(00……31)
  • %e 月份中的天数, 数字(0……31)
  • %m 月, 数字(01……12)
  • %c 月, 数字(1……12)
  • %b 缩写的月份名字(Jan……Dec)
  • %j 一年中的天数(001……366)
  • %H 小时(00……23)
  • %k 小时(0……23)
  • %h 小时(01……12)
  • %I 小时(01……12)
  • %l 小时(1……12)
  • %i 分钟, 数字(00……59)
  • %r 时间,12 小时(hh:mm:ss [AP]M)
  • %T 时间,24 小时(hh:mm:ss)
  • %S 秒(00……59)
  • %s 秒(00……59)
  • %p AM或PM
  • %w 一个星期中的天数(0=Sunday ……6=Saturday )
  • %U 星期(0……52), 这里星期天是星期的第一天
  • %u 星期(0……52), 这里星期一是星期的第一天
补充

IFNULL 用法

MySQL IFNULL 函数是MySQL控制流函数之一,它接受两个参数,如果不是 NULL ,

则返回第一个参数。 否则, IFNULL 函数返回第二个参数。

SELECT IFNULL(num, '暂无') FROm cart;
# 如果行数据num为null,查询结果中显示‘暂无’,如果不是null,显示num的值

应避免在 WHERE 子句中使用 IFNULL 函数,因为它会降低查询的性能。如

果要检查值是否为 NULL ,则可以在 WHERE 子句中使用 IS NULL 或 IS NOT

NULL 。

CASE语句

CASE 语句遍历条件并在满足第一个条件时返回一个值(如 IF-THEN-ELSE 语句)。

因此,一旦条件为真,它将停止读取并返回结果。

如果没有条件为真,它将返回 ELSE 子句中的值。

如果没有ELSE部分且没有条件为真,则返回NULL。

CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
WHEN conditionN THEN resultN
ELSE result
END
# condition1, condition2, ...conditionN 条件
# result1, result2, ...resultN 条件为真时返回的值
# END 表示结束
SELECT CustomerName, City, Country
FROM Customers
ORDER BY
(CASE
WHEN City IS NULL THEN Country
ELSE City
END);
# 如果city是NULL 按照country排序
-- 按照成绩输出等级
SELECT id, score, CASE
WHEN score < 60 THEN 'D'
WHEN score < 70 THEN 'C'
WHEN score < 80 THEN 'B'
END '成绩等级' FROM score;