日期函数
- 返回当前的日期 curdate()(注意只有一个r),current_date()
- SELECT CURDATE(),CuRRENT_DATE() FROM DUAL;
运行结果:
+------------+----------------+
| CURDATE() | CuRRENT_DATE() |
+------------+----------------+
| 2018-10-12 | 2018-10-12 |
+------------+----------------+
- SELECT CURDATE(),CuRRENT_DATE() FROM DUAL;
- 返回当前的时间 curtime(),current_time()
- SELECT CURTIME(),CURRENT_TIME() FROM DUAL;
运行结果:
+-----------+----------------+
| CURTIME() | CURRENT_TIME() |
+-----------+----------------+
| 11:18:49 | 11:18:49 |
+-----------+----------------+
- SELECT CURTIME(),CURRENT_TIME() FROM DUAL;
- 返回当前的日期和时间 now(),current_timestamp(),sysdate(),localtime(),localtimestamp()
- SELECT NOW(),CURRENT_TIMESTAMP(),SYSDATE(),LOCALTIME(),LOCALTIMESTAMP() FROM DUAL;
运行结果:
+---------------------+---------------------+---------------------+---------------------+---------------------+
| NOW() | CURRENT_TIMESTAMP() | SYSDATE() | LOCALTIME() | LOCALTIMESTAMP() |
+---------------------+---------------------+---------------------+---------------------+---------------------+
| 2018-10-12 11:19:15 | 2018-10-12 11:19:15 | 2018-10-12 11:19:15 | 2018-10-12 11:19:15 | 2018-10-12 11:19:15 |
+---------------------+---------------------+---------------------+---------------------+---------------------+
- SELECT NOW(),CURRENT_TIMESTAMP(),SYSDATE(),LOCALTIME(),LOCALTIMESTAMP() FROM DUAL;
- 返回日期date中的年 YEAR(date)
- 返回日期date中的月 month(date) 返回阿拉伯数字; monthname(date) 返回英文月份
- SELECT YEAR('2018-09-03'),MONTH('2018-10-9'),MONTHNAME('2018-10-9') FROM DUAL;
运行结果:
+--------------------+--------------------+------------------------+
| YEAR('2018-09-03') | MONTH('2018-10-9') | MONTHNAME('2018-10-9') |
+--------------------+--------------------+------------------------+
| 2018 | 10 | October |
+--------------------+--------------------+------------------------+
- SELECT YEAR('2018-09-03'),MONTH('2018-10-9'),MONTHNAME('2018-10-9') FROM DUAL;
- SELECT YEAR(now()),YEAR(CURTIME()) FROM DUAL;
运行结果:
+-------------+-----------------+
| YEAR(now()) | YEAR(CURTIME()) |
+-------------+-----------------+
| 2018 | 2018 |
+-------------+-----------------+
- 返回日期date中月份的第几天 dayofmonth(date)
- SELECT DAYOFMONTH(CURTIME()) FROM DUAL;
运行结果:
+-----------------------+
| DAYOFMONTH(CURTIME()) |
+-----------------------+
| 12 |
+-----------------------+
- SELECT DAYOFMONTH(CURTIME()) FROM DUAL;
- 返回日期date中年的第几天 dayofyear(date)
- SELECT DAYOFYEAR(NOW()),DAYOFYEAR('2008-12-30'),DAYOFYEAR('2018-12-30') FROM DUAL;
运行结果:
+------------------+-------------------------+-------------------------+
| DAYOFYEAR(NOW()) | DAYOFYEAR('2008-12-30') | DAYOFYEAR('2018-12-30') |
+------------------+-------------------------+-------------------------+
| 285 | 365 | 364 |
+------------------+-------------------------+-------------------------+
- SELECT DAYOFYEAR(NOW()),DAYOFYEAR('2008-12-30'),DAYOFYEAR('2018-12-30') FROM DUAL;
- hour(time) 返回时间time中的时
- minute(time) 返回时间time中的分
- second(time) 返回时间time中的秒
- SELECT CURTIME(), HOUR(CURTIME()),MINUTE(NOW()),SECOND(NOW()) FROM DUAL;
运行结果:
+-----------+-----------------+---------------+---------------+
| CURTIME() | HOUR(CURTIME()) | MINUTE(NOW()) | SECOND(NOW()) |
+-----------+-----------------+---------------+---------------+
| 11:24:28 | 11 | 24 | 28 |
+-----------+-----------------+---------------+---------------+
- SELECT CURTIME(), HOUR(CURTIME()),MINUTE(NOW()),SECOND(NOW()) FROM DUAL;
- extract(type) 从日期date中返回指定type的值
- SELECT
EXTRACT(YEAR FROM NOW()) 年,EXTRACT(MONTH FROM NOW()) 月,
EXTRACT(DAY FROM NOW()) 日,EXTRACT(HOUR FROM NOW()) 时,
EXTRACT(MINUTE FROM NOW()) 分,EXTRACT(SECOND FROM NOW()) 秒
FROM DUAL;
- SELECT
运行结果:
+------+------+------+------+------+------+
| 年 | 月 | 日 | 时 | 分 | 秒 |
+------+------+------+------+------+------+
| 2018 | 10 | 12 | 11 | 30 | 59 |
+------+------+------+------+------+------+
- adddate(date,n) 返回前面日期加上多少天;可用于计算产假,入职多少天等
- SELECT ADDDATE(NOW(),50);
运行结果:
+---------------------+
| ADDDATE(NOW(),50) |
+---------------------+
| 2018-12-01 11:31:27 |
+---------------------+
- SELECT ADDDATE(NOW(),50);
- addtime(date,n) 返回前面日期加上多少秒,n最大59
- SELECT NOW(),ADDTIME(NOW(),59),ADDTIME(NOW(),60) FROM DUAL;
运行结果:
+---------------------+---------------------+-------------------+
| NOW() | ADDTIME(NOW(),59) | ADDTIME(NOW(),60) |
+---------------------+---------------------+-------------------+
| 2018-10-12 11:31:52 | 2018-10-12 11:32:51 | NULL |
+---------------------+---------------------+-------------------+
- SELECT NOW(),ADDTIME(NOW(),59),ADDTIME(NOW(),60) FROM DUAL;
- datediff(date1,date2) 返回 date1 - date2 的值,有绝对值
- SELECT DATEDIFF(NOW(),'1993-05-07'),DATEDIFF('1993-05-07',NOW()) FROM DUAL; #计算从出生到现在有多少天
运行结果:
+------------------------------+------------------------------+
| DATEDIFF(NOW(),'1993-05-07') | DATEDIFF('1993-05-07',NOW()) |
+------------------------------+------------------------------+
| 9289 | -9289 |
+------------------------------+------------------------------+
- SELECT DATEDIFF(NOW(),'1993-05-07'),DATEDIFF('1993-05-07',NOW()) FROM DUAL; #计算从出生到现在有多少天
- 格式化日期 date_format(date,str) str 有【 %Y%M%D】、【 %y%m%d 】、【 %y/%m/%d 】、【 %Y/%M/%D 】
- SELECT DATE_FORMAT('2018-08-11','%Y%M%D') FROM DUAL;
运行结果:
+------------------------------------+
| DATE_FORMAT('2018-08-11','%Y%M%D') |
+------------------------------------+
| 2018August11th |
+------------------------------------+
- SELECT DATE_FORMAT('2018-08-11','%y%m%d') FROM DUAL;
运行结果:
+------------------------------------+
| DATE_FORMAT('2018-08-11','%y%m%d') |
+------------------------------------+
| 180811 |
+------------------------------------+
- SELECT DATE_FORMAT('2018-08-11','%Y/%M/%D') FROM DUAL;
运行结果:
+--------------------------------------+
| DATE_FORMAT('2018-08-11','%Y/%M/%D') |
+--------------------------------------+
| 2018/August/11th |
+--------------------------------------+
- SELECT DATE_FORMAT('2018-08-11','%y/%m/%d') FROM DUAL;
运行结果:
+--------------------------------------+
| DATE_FORMAT('2018-08-11','%y/%m/%d') |
+--------------------------------------+
| 18/08/11 |
+--------------------------------------+
- SELECT DATE_FROMAT('2018-08-11','%y/%m/%d') FROM DUAL;
代码:
+--------------------------------------+
| DATE_FORMAT('2018-08-11','%y/%m/%d') |
+--------------------------------------+
| 18/08/11 |
+--------------------------------------+
- 判断空否 ifnull(v1,v2) 如果v1值不为null,则返回v1,否则返回v2
- SELECT vend_state,IFNULL(VEND_STATE,'SZ') AS 城市 FROM vendors;
运行结果:
+------------+--------+
| vend_state | 城市 |
+------------+--------+
| MI | MI |
| OH | OH |
| CA | CA |
| NY | NY |
| NULL | SZ |
| NULL | SZ |
+------------+--------+
- SELECT vend_state,IFNULL(VEND_STATE,'SZ') AS 城市 FROM vendors;
- if(exp,v1,v2) 如果表达式exp成立,返回v1,否则返回v2
- SELECT vend_state,IF(VEND_STATE IS NULL,'SZ',VEND_STATE) AS 城市 FROM vendors; #(等同与上者)
运行结果:
+------------+--------+
| vend_state | 城市 |
+------------+--------+
| MI | MI |
| OH | OH |
| CA | CA |
| NY | NY |
| NULL | SZ |
| NULL | SZ |
+------------+--------+
- SELECT vend_state,IF(VEND_STATE IS NULL,'SZ',VEND_STATE) AS 城市 FROM vendors; #(等同与上者)
- SELECT prod_name,prod_price,IF(prod_price > 5,'贵','便宜') AS 评价 FROM products;
运行结果:
+----------------+------------+--------+
| prod_name | prod_price | 评价 |
+----------------+------------+--------+
| .5 ton anvil | 5.99 | 贵 |
| 1 ton anvil | 9.99 | 贵 |
| 2 ton anvil | 14.99 | 贵 |
| Detonator | 13.00 | 贵 |
| Bird seed | 10.00 | 贵 |
| Carrots | 2.50 | 便宜 |
| Fuses | 3.42 | 便宜 |
| JetPack 1000 | 35.00 | 贵 |
| TNT (5 sticks) | 10.00 | 贵 |
+----------------+------------+--------+
- 多重判断 case when exp1 than '别名' [when exp2 than '别名'] [...] end 列别名
代码:
SELECT vend_id,prod_name,prod_price,
case
when prod_price <= 10 then '便宜'
when prod_price>10 && prod_price <= 20 then '比较贵'
when prod_price>20 then '贵'
end 评价
FROM products;
运行结果:
+---------+----------------+------------+-----------+
| vend_id | prod_name | prod_price | 评价 |
+---------+----------------+------------+-----------+
| 1001 | .5 ton anvil | 5.99 | 便宜 |
| 1001 | 1 ton anvil | 9.99 | 便宜 |
| 1001 | 2 ton anvil | 14.99 | 比较贵 |
| 1003 | Detonator | 13.00 | 比较贵 |
| 1003 | Bird seed | 10.00 | 便宜 |
| 1005 | JetPack 1000 | 35.00 | 贵 |
| 1005 | JetPack 2000 | 55.00 | 贵 |
| 1002 | Oil can | 8.99 | 便宜 |
| 1003 | Safe | 50.00 | 贵 |
+---------+----------------+------------+-----------+
系统信息函数
- 返回数据库的版本号: version()
- 返回服务器的链接数: connection_id()
- 返回当前的数据库名: database(),schema()
- 返回当前用户: user(),system_user(),current_user()
加密函数: password(str),md5(str)
运行结果:
+-------------------------------------------+----------------------------------+
| password('root') | md5('root') |
+-------------------------------------------+----------------------------------+
| *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | 63a9f0ea7bb98050796b649e85481845 |
+-------------------------------------------+----------------------------------+
格式化函数
- 将数字进行格式格式化:format(x,n) (n数字,n截取的小数位)
- SELECT FORMAT(1234.1234,2) FROM DUAL;
运行结果:
+---------------------+
| FORMAT(1234.1234,2) |
+---------------------+
| 1,234.12 |
+---------------------+
- SELECT FORMAT(1234.1234,2) FROM DUAL;
- ascll(str) 返回字符串第一个字符的ASCII值
bin(str) 十进制转二进制
数值函数
- 最大值 max() 空值不会参与计算
- 最小值 min() 空值不会参与计算
- 总计 sum() 空值不会参与计算
- 平均数 avg() 空值不会参与计算
- SELECT MAX(prod_price)最大值,min(prod_price) 最小值,AVG(prod_price) 总计,AVG(prod_price)平均数 FROM products;
运行结果:
+-----------+-----------+-----------+-----------+
| 最大值 | 最小值 | 总计 | 平均数 |
+-----------+-----------+-----------+-----------+
| 55.00 | 2.50 | 16.133571 | 16.133571 |
+-----------+-----------+-----------+-----------+
- SELECT MAX(prod_price)最大值,min(prod_price) 最小值,AVG(prod_price) 总计,AVG(prod_price)平均数 FROM products;
- 计数 count()
- count(*) 会统计非空; count(column) 空值不会参与计算
- SELECT COUNT(),COUNT(VEND_STATE) FROM VENDORS;
运行结果:
+----------+-------------------+
| COUNT() | COUNT(VEND_STATE) |
+----------+-------------------+
| 6 | 4 |
+----------+-------------------+
- SELECT COUNT(),COUNT(VEND_STATE) FROM VENDORS;