4.1 文本处理函数

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

4.2 时间和日期处理函数

image.png
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 仅提取列的日期部分

  1. SELECT DATE(NOW()) as date, TIME(NOW()) as time

image.png

4.2.1 now()

可以用来返回当前日期和时间 格式:YYYY-MM-DD hh:mm:ss。要精确到秒以后的时间的话,可以在()中加数字,加多少,就表示精确到秒后多少位,NOW(3) 就是精确到毫秒,表示为:2021-12-27 14:41:31.110。

  1. SELECT NOW() as time
  2. SELECT NOW(3) as time

image.png
image.png

4.2.2 CURDATE()

可以用来返回当前日期 格式:YYYY-MM-DD

  1. SELECT CURDATE() as time

image.png

4.2.3 CURTIME()

可以用来返回当前时间 格式:hh:mm:ss。要精确到秒以后的时间的话,可以在()中加数字,加多少,就表示精确到秒后多少位。

  1. SELECT CURTIME() as time

image.png

4.2.4 EXTRACT()

EXTRACT() 函数用于返回日期/时间的单独部分,如 YEAR (年)、MONTH (月)、DAY (日)、HOUR (小时)、MINUTE (分钟)、 SECOND (秒)。

  1. SELECT EXTRACT(unit FROM date)
  2. FROM `table`
  3. SELECT EXTRACT(MONTH FROM order_date)
  4. FROM orders
  • table 是表格名
  • date 参数是合法的日期表达式。
  • unit 参数是需要返回的时间部分,如 YEAR 、MONTH 、 DAY 、 HOUR 、MINUTE 、SECOND 等。
  • 在一般情况下,EXTRACT(unit FROM date) 与 unit() 的结果相同。

image.png

4.2.5 DATE_FORMAT

格式化输出 date/time。需要注意的是 DATE_FORMAT() 函数返回的是字符串格式。

  1. SELECT DATE_FORMAT(NOW(),'%Y %m %D')
  2. SELECT DATE_FORMAT(order_date,'%Y-%m-%D %T')
  3. FROM orders

image.png
image.png

4.2.6 DATE_ADD、DATA_SUB

DATE_ADD,向日期添加指定的时间间隔。DATA_SUB,向日期减少指定的时间间隔。用法相同。

  1. SELECT DATE_ADD(date, INTERVAL expr type)
  2. FROM table_name
  • expr 是希望添加的时间间隔的数值(expr 是一个字符串,对于负值的间隔,可以以 “-” 开头)
  • type 是具体的数据类型,表示加上时间间隔的单位(可以是 MICROSECOND , SECOND , MINUTE , HOUR , DAY , WEEK , MONTH , QUARTER , YEAR 等)

    1. UPDATE orders
    2. SET order_date = DATE_ADD(order_date,INTERVAL 1 HOUR);
    3. SELECT order_date
    4. FROM orders

    image.png

    4.2.7 计算时间差 DATEDIFF()、TIMESTAMPDIFF()

  • DATEDIFF()

DATEDIFF() 常用的日期差,在 MySQL 中默认只能计算天数差。差值计算规则:时间 1 - 时间 2

  1. SELECT DATEDIFF(时间1,时间2) AS date_diff FROM courses;
  2. SELECT DATEDIFF(order_date,'2001-01-12')
  3. FROM orders

image.png

  • TIMESTAMPDIFF()

计算两个日期相差的年(YEAR,时间1,时间2),月(MONTH,时间1,时间2),周(WEEK,时间1,时间2),日(DAY,时间1,时间2),小时(HOUR,时间1,时间2)。差值计算规则:时间 2 - 时间 1

  1. SELECT TIMESTAMPDIFF (类型,时间1,时间2) AS year_diff;
  2. SELECT TIMESTAMPDIFF(WEEK,order_date,'2007-01-12')
  3. FROM orders

image.png

4.3 数值处理函数

image.png

4.4 聚集函数

  • 对所有的行执行计算,指定 ALL 参数或不给参数(因为 ALL 是默认行为)
  • 只包含不同的值,指定 DISTINCT 参数

image.png

4.5 round()

用于把数值字段四舍五入为指定的小数位数。

  1. - ROUND( X ):返回参数 X 四舍五入后的一个整数。
  2. - ROUND(X, D): 返回参数 X 四舍五入且保留 D 位小数后的一个数字。如果 D 0,结果将没有小数点或小数部分。
  1. ROUND(-1.99) // -2
  2. ROUND(-1.49) // -1
  3. ROUND(1.51) // 2
  4. ROUND(1.388, 1) // 1.4
  5. ROUND(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。

  1. SELECT ISNULL(`column_name`)
  2. FROM `table_name`;
  3. SELECT ISNULL(cust_email)
  4. FROM customers

image.png

4.6.2 IFNULL()

用于判断字段是否为NULL,但是与 ISNULL() 不同的是它接收两个参数,第一个参数 column_name 为列名,第二个参数 value 相当于备用值。如果 column_name 列中的某个字段是 NULL 则返回 value 值,不是则返回对应内容。
COALESCE(column_name, value) 函数也用于判断字段是否为NULL,其用法和 IFNULL() 相同。

  1. SELECT IFNULL(`column_name`, `value`)
  2. FROM `table_name`;
  3. SELECT IFNULL(cust_email,0)
  4. FROM customers

image.png