📜  SQL |日期函数

📅  最后修改于: 2021-09-09 11:10:31             🧑  作者: Mango

在 SQL 中,日期对于新手来说很复杂,因为在使用数据库时,表中日期的格式必须与输入日期匹配才能插入。在各种场景中,不是日期,而是使用日期时间(时间也与日期有关)。
在 MySql 中,默认的日期函数是:

  • NOW():返回当前日期和时间。例子:
    SELECT NOW();
    

    输出:

    2017-01-13 08:03:52
    
  • CURDATE() :返回当前日期。例子:
    SELECT CURDATE();
    

    输出:

    2017-01-13
    
  • CURTIME():返回当前时间。例子:
    SELECT CURTIME();
    

    输出:

    08:05:15
    
  • DATE() :提取日期或日期/时间表达式的日期部分。例子:
    对于下表名为“测试”

    Id Name BirthTime
    4120 Pratik 1996-09-26 16:44:15.581
    SELECT Name, DATE(BirthTime) AS BirthDate FROM Test;
    

    输出:

    Name BirthDate
    Pratik 1996-09-26
  • EXTRACT():返回日期/时间的单个部分。句法:
    EXTRACT(unit FORM date);
    

    有几个单位可以考虑,但只有一些单位被使用,例如:
    微秒、秒、分钟、小时、天、周、月、季度、年等。
    ‘date’ 是一个有效的日期表达式。

    例子:
    对于下表名为“测试”

    Id Name BirthTime
    4120 Pratik 1996-09-26 16:44:15.581

    查询

    • SELECT Name, Extract(DAY FROM BirthTime) AS BirthDay FROM Test;
      

      输出:

      Name BirthDay
      Pratik 26
    • SELECT Name, Extract(YEAR FROM BirthTime) AS BirthYear FROM Test;
      

      输出:

      Name BirthYear
      Pratik 1996
    • SELECT Name, Extract(SECOND FROM BirthTime) AS BirthSecond FROM Test;
      

      输出:

      Name BirthSecond
      Pratik 581
  • DATE_ADD() :将指定的时间间隔添加到日期
    句法:

    DATE_ADD(date, INTERVAL expr type);
    

    其中,date – 有效日期表达式和 expr 是我们要添加的间隔数。
    和类型可以是以下之一:
    微秒、秒、分钟、小时、天、周、月、季度、年等。

    例子:
    对于下表名为“测试”

    Id Name BirthTime
    4120 Pratik 1996-09-26 16:44:15.581

    查询

    • SELECT Name, DATE_ADD(BirthTime, INTERVAL 1 YEAR) AS BirthTimeModified FROM Test;
      

      输出:

      Name BirthTimeModified
      Pratik 1997-09-26 16:44:15.581
    • SELECT Name, DATE_ADD(BirthTime, INTERVAL 30 DAY) AS BirthDayModified FROM Test;
      

      输出:

      Name BirthDayModified
      Pratik 1996-10-26 16:44:15.581
    • SELECT Name, DATE_ADD(BirthTime, INTERVAL 4 HOUR) AS BirthHourModified FROM Test;
      

      输出:

      Name BirthSecond
      Pratik 1996-10-26 20:44:15.581
  • DATE_SUB():从日期中减去指定的时间间隔。 DATE_SUB 的语法与 DATE_ADD 相同,区别在于 DATE_SUB 用于减去给定的日期间隔。
  • DATEDIFF():返回两个日期之间的天数。语法:
    DATEDIFF(date1, date2);
    date1 & date2- date/time expression
    

    例子:

    SELECT DATEDIFF('2017-01-13','2017-01-03') AS DateDiff;
    

    输出:

    DateDiff
    10
  • DATE_FORMAT():以不同格式显示日期/时间数据。语法:
    DATE_FORMAT(date,format);
    

    date 是一个有效的日期,format 指定日期/时间的输出格式。可以使用的格式有:

    • %a-缩写的工作日名称(Sun-Sat)
    • %b-缩写月份名称(Jan-Dec)
    • %c-Month,数字 (0-12)
    • %D-带英文后缀的月份中的第几天(0th、1st、2nd、3rd)
    • %d-月中的第几天,数字 (00-31)
    • %e-月中的第几天,数字 (0-31)
    • %f-微秒 (000000-999999)
    • %H-小时 (00-23)
    • %h-Hour (01-12)
    • %I 小时 (01-12)
    • %i-分钟,数字 (00-59)
    • %j-一年中的第几天 (001-366)
    • %k 小时 (0-23)
    • %l 小时 (1-12)
    • %M-月份名称(一月至十二月)
    • %m-月,数字 (00-12)
    • %p-AM 或 PM
    • %r-时间,12 小时(hh:mm:ss 后跟 AM 或 PM)
    • %S-秒 (00-59)
    • %s-秒 (00-59)
    • %T-时间,24 小时制 (hh:mm:ss)
    • %U-Week (00-53) 其中星期日是一周的第一天
    • %u-Week (00-53) 其中星期一是一周的第一天
    • %V-Week (01-53) 其中星期日是一周的第一天,与 %X 一起使用
    • %v-Week (01-53) 其中星期一是一周的第一天,与 %x 一起使用
    • %W-Weekday name (Sunday-Saturday)
    • %w-星期几(0=星期日,6=星期六)
    • %X-Year 表示星期日是一周的第一天,四位数字,与 %V 一起使用
    • %x-Year 表示一周的第一天,Monday 是一周的第一天,四位数字,与 %v 一起使用
    • %Y-Year,数字,四位数字
    • %y-Year,数字,两位数

    例子:

    DATE_FORMAT(NOW(),'%d %b %y')
    

    结果:

    13 Jan 17