mysql中关于日期的语法和函数

一、日期与时间数据类型

  1. DATE:格式 YYYY-MM-DD,仅存储日期。

  2. TIME:格式 HH:MM:SS,仅存储时间。

  3. DATETIME:格式 YYYY-MM-DD HH:MM:SS,存储日期和时间。

  4. TIMESTAMP:与 DATETIME 类似,但受时区影响,范围较小(1970-2038)。

  5. YEAR:存储年份(4位或2位格式)。

二、获取当前日期/时间

        SELECT NOW();       
        SELECT SYSDATE();    -- 语句执行时刻的时间

        SELECT CURDATE();   
        SELECT CURRENT_DATE();

    SELECT CURTIME();    
    SELECT CURRENT_TIME();

三、提取日期部分

        SELECT YEAR('2023-10-05');     -- 2023
        SELECT MONTH('2023-10-05');    -- 10
        SELECT DAY('2023-10-05');      -- 5

        SELECT HOUR('14:30:00');       -- 14
        SELECT MINUTE('14:30:00');     -- 30
        SELECT SECOND('14:30:00');     -- 0

        SELECT DAYNAME('2023-10-05');   -- Thursday
        SELECT MONTHNAME('2023-10-05');-- October
        SELECT WEEK('2023-10-05');     -- 第40周(默认周日为周首)
        SELECT EXTRACT(YEAR_MONTH FROM '2023-10-05'); -- 202310

四、日期格式化

        日期 → 字符串

        SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s'); -- 2023-10-05 14:30:00

        格式化符号示例:

        %Y:4位年份

        %m:两位月份(01-12)

        %d:两位日期

        %H:24小时制小时

        %i:分钟

                             更多符号参考官方文档。

        字符串 → 日期

                        SELECT STR_TO_DATE('05-10-2023', '%d-%m-%Y'); -- 2023-10-05

五、日期计算

         加减日期

        SELECT DATE_ADD('2023-10-05', INTERVAL 1 DAY);   -- 加1天 → 2023-10-06
        SELECT DATE_SUB('2023-10-05', INTERVAL 1 MONTH);-- 减1月 → 2023-09-05
        -- 简写:
        SELECT '2023-10-05' + INTERVAL 1 WEEK;
        SELECT '2023-10-05' - INTERVAL 1 YEAR;

        计算差值

        SELECT DATEDIFF('2023-10-05', '2023-10-01'); -- 天数差 → 4
        SELECT TIMEDIFF('14:30:00', '12:00:00');     -- 时间差 → 02:30:00
        SELECT TIMESTAMPDIFF(YEAR, '2000-10-05', CURDATE()); -- 年龄计算 → 23

        其他计算

                SELECT LAST_DAY('2023-10-05');     -- 当月最后一天 → 2023-10-31
                SELECT ADDDATE('2023-10-05', 7);  -- 默认加天数 → 2023-10-12

六、日期查询示例

           查询今日数据

                SELECT * FROM orders WHERE order_date = CURDATE();

           查询最近7天数据

                SELECT * FROM logs 
                WHERE log_time >= DATE_SUB(NOW(), INTERVAL 7 DAY);

           按月份分组统计

        SELECT MONTH(order_date), COUNT(*) 
        FROM orders 
        GROUP BY MONTH(order_date);

           避免索引失效的写法:      

        -- 低效(索引可能失效):
        SELECT * FROM sales WHERE YEAR(sale_date) = 2023;
        -- 高效(利用索引):
        SELECT * FROM sales 
        WHERE sale_date BETWEEN '2023-01-01' AND '2023-12-31';

  七、其他函数

           UNIX时间戳转换

                SELECT UNIX_TIMESTAMP('2023-10-05 14:30:00'); -- 转换为秒级时间戳
                SELECT FROM_UNIXTIME(1696523400);     -- 时间戳转日期 → 2023-10-05 14:30:00

           时区处理

         SELECT CONVERT_TZ(NOW(), 'UTC', 'Asia/Shanghai'); -- 转换时区

你可能感兴趣的:(mysql,数据库)