一、获取当前日期时间函数
用于快速获取系统当前的日期、时间或日期时间,部分支持指定小数秒精度(0-6)。
- NOW([fsp]):返回当前日期和时间
- 示例: SELECT NOW(3); → 2024-11-29 16:00:00.123
- 示例: SELECT NOW(); → 2024-11-29 16:00:00 (默认无小数秒)
- SYSDATE([fsp]):返回函数执行时的系统日期时间,与NOW()区别是在存储函数/触发器中每次调用都重新计算
- 示例: SELECT SYSDATE(2); → 2024-11-29 16:05:30.45
- CURDATE():无参数,仅返回当前日期
- 示例: SELECT CURDATE(); → 2024-11-29
- CURTIME([fsp]):返回当前时间
- 示例: SELECT CURTIME(2); → 16:05:00.12
- 示例: SELECT CURTIME(); → 16:05:00
二、日期时间提取函数
从日期时间表达式中提取指定部分(年、月、日、时等)。
- DATE(expr):提取日期部分,参数为日期时间表达式
- 示例: SELECT DATE('2024-11-29 17:00:00'); → 2024-11-29
- 示例: SELECT DATE(NOW()); → 2024-11-29 (结合当前时间函数使用)
- YEAR(date):提取年份,参数为日期值
- 示例: SELECT YEAR('2024-11-29'); → 2024
- 示例: SELECT YEAR('2023-05-15'); → 2023
- MONTH(date):提取月份(1-12),参数为日期值
- 示例: SELECT MONTH('2024-11-29'); → 11
- 示例: SELECT MONTH('2024-02-01'); → 2
- DAY(date)/DAYOFMONTH(date):提取月份中的日(1-31),参数为日期值
- 示例: SELECT DAY('2024-11-29'); → 29
- 示例: SELECT DAYOFMONTH('2024-12-05'); → 5
- HOUR(time):提取小时(0-23),参数为时间值
- 示例: SELECT HOUR('17:00:00'); → 17
- 示例: SELECT HOUR('23:59:59'); → 23
- MINUTE(time):提取分钟(0-59),参数为时间值
- 示例: SELECT MINUTE('17:05:00'); → 5
- 示例: SELECT MINUTE('09:30:25'); → 30
- SECOND(time):提取秒(0-59),参数为时间值
- 示例: SELECT SECOND('17:05:30'); → 30
- 示例: SELECT SECOND('22:10:08'); → 8
- EXTRACT(unit FROM date):提取指定日期部分,unit为提取单位(YEAR、MONTH、DAY、HOUR等)
- 示例: SELECT EXTRACT(YEAR_MONTH FROM '2024-11-29'); → 202411
- 示例: SELECT EXTRACT(DAY_HOUR FROM '2024-11-29 17:00:00'); → 2917
- 示例: SELECT EXTRACT(MINUTE FROM '2024-11-29 17:05:00'); → 5
三、日期计算函数
用于计算日期差值或对日期进行增减操作。
- DATEDIFF(expr1, expr2):计算两个日期相差的天数,仅算日期部分,结果为 expr1 - expr2 ,参数为日期或日期时间表达式
- 示例: SELECT DATEDIFF('2024-11-29', '2024-11-25'); → 4
- 示例: SELECT DATEDIFF('2024-12-01', '2024-11-29 17:00:00'); → 2 (忽略时间部分)
- TIMEDIFF(expr1, expr2):计算两个时间差值,要求两参数类型相同(均为时间或均为日期时间)
- 示例(时间类型): SELECT TIMEDIFF('17:00:00', '15:30:00'); → 01:30:00
- 示例(日期时间类型): SELECT TIMEDIFF('2024-11-29 17:00:00', '2024-11-29 15:30:00'); → 01:30:00
- DATE_ADD(date, INTERVAL expr unit):日期加法, date 为起始日期, expr 为间隔值, unit 为间隔单位(如DAY、MONTH、QUARTER等)
- 示例: SELECT DATE_ADD('2024-11-29', INTERVAL 1 QUARTER); → 2025-02-28
- 示例: SELECT DATE_ADD('2024-11-29', INTERVAL 7 DAY); → 2024-12-06
- 示例: SELECT DATE_ADD('2024-11-29 17:00:00', INTERVAL 2 HOUR); → 2024-11-29 19:00:00
- DATE_SUB(date, INTERVAL expr unit):日期减法,参数与DATE_ADD相同
- 示例: SELECT DATE_SUB('2024-11-29', INTERVAL 1 MONTH); → 2024-10-29
- 示例: SELECT DATE_SUB('2024-11-29 17:00:00', INTERVAL 30 MINUTE); → 2024-11-29 16:30:00
四、周相关函数
用于获取日期对应的周数、年份与周数组合等,部分支持指定计算模式(模式决定一周起始日及周数计算规则)。
- WEEK(date[, mode]):返回周数(0-53), date 为日期值, mode (可选)为计算模式
- 示例(模式1:周一为起始日,包含4天以上为新周): SELECT WEEK('2024-01-01', 1); → 1
- 示例(模式0:周日为起始日,包含第一个周日为新周): SELECT WEEK('2024-01-01', 0); → 0
- 示例(默认模式): SELECT WEEK('2024-12-30'); → 52 (具体结果依赖MySQL默认模式设置)
- WEEKOFYEAR(date):类似WEEK(),固定使用模式3(ISO 8601标准:周一为起始日,全年第1周至少含4天),等同于 WEEK(date, 3)
- 示例: SELECT WEEKOFYEAR('2024-01-01'); → 1
- 示例: SELECT WEEKOFYEAR('2024-12-31'); → 53 (若该周含下一年1月1日且满足ISO规则)
- YEARWEEK(date[, mode]):返回年份和周数(格式为 YYYYWW ), date 为日期值, mode 可选
- 示例: SELECT YEARWEEK('2024-01-01'); → 202401
- 示例(指定模式1): SELECT YEARWEEK('2023-12-31', 1); → 202401 (因该日属于2024年第1周)
五、日期格式化函数
- DATE_FORMAT(date, format):将日期按指定格式转换为字符串, date 为日期值, format 为格式字符串(常用格式符见下文)
- 示例(年/月/日 时:分:秒): SELECT DATE_FORMAT(NOW(), '%Y/%m/%d %H:%i:%s'); → 2024/11/29 16:00:00
- 示例(带星期名称): SELECT DATE_FORMAT('2024-11-29', '%Y-%m-%d %W'); → 2024-11-29 Friday
- 示例(简写月份): SELECT DATE_FORMAT('2024-11-29', '%Y-%b-%d'); → 2024-Nov-29
常用格式符说明:
- %Y :4位年份(如2024)
- %m :2位月份(01-12,如11)
- %d :2位日(01-31,如29)
- %H :24小时制小时(00-23,如16)
- %i :2位分钟(00-59,如00)
- %s :2位秒(00-59,如00)
- %W :完整星期名称(如Friday)
- %b :简写月份(如Nov)
六、INTERVAL单位完整列表
DATE_ADD、DATE_SUB等函数支持的间隔单位如下,可根据需求选择:
- 基础单位: MICROSECOND (微秒)、 SECOND (秒)、 MINUTE (分)、 HOUR (时)、 DAY (日)、 WEEK (周)、 MONTH (月)、 QUARTER (季度)、 YEAR (年)
- 组合单位: SECOND_MICROSECOND (秒.微秒)、 MINUTE_MICROSECOND (分.微秒)、 MINUTE_SECOND (分:秒)、 HOUR_MICROSECOND (时.微秒)、 HOUR_SECOND (时:分:秒)、 HOUR_MINUTE (时:分)、 DAY_MICROSECOND (日.微秒)、 DAY_SECOND (日 时:分:秒)、 DAY_MINUTE (日 时:分)、 DAY_HOUR (日 时)、 YEAR_MONTH (年-月)
注意:所有函数的具体行为可能受MySQL服务器系统变量(如默认周开始日)影响,实际使用时需结合当前配置验证结果。