mysql学习笔记(2)

日期函数

  • 返回当前的日期 curdate()(注意只有一个r),current_date()
    • SELECT CURDATE(),CuRRENT_DATE() FROM DUAL;
      运行结果:
      +------------+----------------+
      | CURDATE() | CuRRENT_DATE() |
      +------------+----------------+
      | 2018-10-12 | 2018-10-12 |
      +------------+----------------+

  • 返回当前的时间 curtime(),current_time()
    • SELECT CURTIME(),CURRENT_TIME() FROM DUAL;
      运行结果:
      +-----------+----------------+
      | CURTIME() | CURRENT_TIME() |
      +-----------+----------------+
      | 11:18:49 | 11:18:49 |
      +-----------+----------------+
  • 返回当前的日期和时间 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 |
      +---------------------+---------------------+---------------------+---------------------+---------------------+

  • 返回日期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(now()),YEAR(CURTIME()) FROM DUAL;
    运行结果:
    +-------------+-----------------+
    | YEAR(now()) | YEAR(CURTIME()) |
    +-------------+-----------------+
    | 2018 | 2018 |
    +-------------+-----------------+
  • 返回日期date中月份的第几天 dayofmonth(date)
    • SELECT DAYOFMONTH(CURTIME()) FROM DUAL;
      运行结果:
      +-----------------------+
      | DAYOFMONTH(CURTIME()) |
      +-----------------------+
      | 12 |
      +-----------------------+
  • 返回日期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 |
      +------------------+-------------------------+-------------------------+
  • 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 |
      +-----------+-----------------+---------------+---------------+
  • 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;
运行结果:
+------+------+------+------+------+------+
| 年   | 月   | 日   | 时   | 分   | 秒   |
+------+------+------+------+------+------+
| 2018 |   10 |   12 |   11 |   30 |   59 |
+------+------+------+------+------+------+
  • adddate(date,n) 返回前面日期加上多少天;可用于计算产假,入职多少天等
    • SELECT ADDDATE(NOW(),50);
      运行结果:
      +---------------------+
      | ADDDATE(NOW(),50) |
      +---------------------+
      | 2018-12-01 11:31:27 |
      +---------------------+
  • 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 |
      +---------------------+---------------------+-------------------+
  • 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 |
      +------------------------------+------------------------------+

  • 格式化日期 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 |
      +------------+--------+
  • 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 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 |
      +---------------------+
  • 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 |
      +-----------+-----------+-----------+-----------+
  • 计数 count()
  • count(*) 会统计非空; count(column) 空值不会参与计算
    • SELECT COUNT(),COUNT(VEND_STATE) FROM VENDORS;
      运行结果:
      +----------+-------------------+
      | COUNT(
      ) | COUNT(VEND_STATE) |
      +----------+-------------------+
      | 6 | 4 |
      +----------+-------------------+

猜你喜欢

转载自www.cnblogs.com/sunning-days/p/9789202.html