4.1 文本处理函数
SOUNDEX 是一个将任何文本串转换为描述其语音表示的字母数字模式的算法。SOUNDEX考虑了类似的发音字符和音节,使得能对串进行发音比较而不是字母比较。虽然SOUNDEX不是SQL 概念,但MySQL (就像多数DBMS 一样)都提供对SOUNDEX的支持。
例:
customers 表中有一个顾客 Coyote Inc.,其联系名为 Y.Lee。但如果这是输入错误,此联系名实际应该是 Y.Lie,怎么办?按正确的联系名搜索不会返回数据,使用 Soundex() 函数进行搜索,它匹配所有发音类似于 Y.Lie 的联系名。
4.2 时间和日期处理函数

login_ date的数据类型为 datetime。这种类型存储日期及时间值。样例表中的值全都具有时间值00:00:00,但实际中很可能并不总是这样。如果用当前日期和时间存储注册日期(因此你不仅知道订单日期,还知道下订单当天的时间),比如,存储的 login_date 值为 2005-09-01 11:30:05,则WHERE login_date = ‘2005-09-01’失败。即使给出具有该日期的一行,也不会把它检索出来,因为 WHERE 匹配失败。
解决办法是指示 MySQL 仅将给出的日期与列中的日期部分进行比较,而不是将给出的日期与整个列值进行比较。为此,必须使用 Date() 函数。Date(login_date)指示 MySQL 仅提取列的日期部分。
SELECT DATE(NOW()) as date, TIME(NOW()) as time
4.2.1 now()
可以用来返回当前日期和时间 格式:YYYY-MM-DD hh:mm:ss。要精确到秒以后的时间的话,可以在()中加数字,加多少,就表示精确到秒后多少位,NOW(3) 就是精确到毫秒,表示为:2021-12-27 14:41:31.110。
SELECT NOW() as timeSELECT NOW(3) as time
4.2.2 CURDATE()
可以用来返回当前日期 格式:YYYY-MM-DD
SELECT CURDATE() as time
4.2.3 CURTIME()
可以用来返回当前时间 格式:hh:mm:ss。要精确到秒以后的时间的话,可以在()中加数字,加多少,就表示精确到秒后多少位。
SELECT CURTIME() as time
4.2.4 EXTRACT()
EXTRACT() 函数用于返回日期/时间的单独部分,如 YEAR (年)、MONTH (月)、DAY (日)、HOUR (小时)、MINUTE (分钟)、 SECOND (秒)。
SELECT EXTRACT(unit FROM date)FROM `table`SELECT EXTRACT(MONTH FROM order_date)FROM orders
- table 是表格名
- date 参数是合法的日期表达式。
- unit 参数是需要返回的时间部分,如 YEAR 、MONTH 、 DAY 、 HOUR 、MINUTE 、SECOND 等。
- 在一般情况下,EXTRACT(unit FROM date) 与 unit() 的结果相同。
4.2.5 DATE_FORMAT
格式化输出 date/time。需要注意的是 DATE_FORMAT() 函数返回的是字符串格式。
SELECT DATE_FORMAT(NOW(),'%Y %m %D')SELECT DATE_FORMAT(order_date,'%Y-%m-%D %T')FROM orders
4.2.6 DATE_ADD、DATA_SUB
DATE_ADD,向日期添加指定的时间间隔。DATA_SUB,向日期减少指定的时间间隔。用法相同。
SELECT DATE_ADD(date, INTERVAL expr type)FROM table_name
- expr 是希望添加的时间间隔的数值(expr 是一个字符串,对于负值的间隔,可以以 “-” 开头)
type 是具体的数据类型,表示加上时间间隔的单位(可以是 MICROSECOND , SECOND , MINUTE , HOUR , DAY , WEEK , MONTH , QUARTER , YEAR 等)
UPDATE ordersSET order_date = DATE_ADD(order_date,INTERVAL 1 HOUR);SELECT order_dateFROM orders
4.2.7 计算时间差 DATEDIFF()、TIMESTAMPDIFF()
DATEDIFF()
DATEDIFF() 常用的日期差,在 MySQL 中默认只能计算天数差。差值计算规则:时间 1 - 时间 2
SELECT DATEDIFF(时间1,时间2) AS date_diff FROM courses;SELECT DATEDIFF(order_date,'2001-01-12')FROM orders

- TIMESTAMPDIFF()
计算两个日期相差的年(YEAR,时间1,时间2),月(MONTH,时间1,时间2),周(WEEK,时间1,时间2),日(DAY,时间1,时间2),小时(HOUR,时间1,时间2)。差值计算规则:时间 2 - 时间 1
SELECT TIMESTAMPDIFF (类型,时间1,时间2) AS year_diff;SELECT TIMESTAMPDIFF(WEEK,order_date,'2007-01-12')FROM orders
4.3 数值处理函数
4.4 聚集函数
- 对所有的行执行计算,指定 ALL 参数或不给参数(因为 ALL 是默认行为)
- 只包含不同的值,指定 DISTINCT 参数
4.5 round()
用于把数值字段四舍五入为指定的小数位数。
- ROUND( X ):返回参数 X 四舍五入后的一个整数。- ROUND(X, D): 返回参数 X 四舍五入且保留 D 位小数后的一个数字。如果 D 为 0,结果将没有小数点或小数部分。
ROUND(-1.99) // -2ROUND(-1.49) // -1ROUND(1.51) // 2ROUND(1.388, 1) // 1.4ROUND(1.498, 0) // 1
4.6 NULL()
NULL ,即我们常说的空值。但是这种叫法并不准确,因为 NULL 并不是值,它表示数值未知或者不确定。因此,NULL 无法和 0 或空格字符串 “” 进行比较,甚至 NULL 与 NULL 之间也无法比较。默认地,表的列可以存放 NULL 。
4.6.1 ISNULL()
用于判断字段是否为 NULL,它只有一个参数 column_name 为列名,根据 column_name 列中的字段是否为 NULL 值返回 0 或 1。
SELECT ISNULL(`column_name`)FROM `table_name`;SELECT ISNULL(cust_email)FROM customers
4.6.2 IFNULL()
用于判断字段是否为NULL,但是与 ISNULL() 不同的是它接收两个参数,第一个参数 column_name 为列名,第二个参数 value 相当于备用值。如果 column_name 列中的某个字段是 NULL 则返回 value 值,不是则返回对应内容。
COALESCE(column_name, value) 函数也用于判断字段是否为NULL,其用法和 IFNULL() 相同。
SELECT IFNULL(`column_name`, `value`)FROM `table_name`;SELECT IFNULL(cust_email,0)FROM customers



