SQL必会的常用函数(二)日期函数

SQL日期函数详解

一、获取当前日期与时间

MySQL使用NOW()获取当前日期时间,CURDATE()获取当前日期,CURTIME()获取当前时间。

SQL Server使用GETDATE(),并通过CAST转换为日期或时间类型。

-- MySQL示例
SELECT NOW(), CURDATE(), CURTIME();

-- SQL Server示例
SELECT GETDATE(), CAST(GETDATE() AS DATE), CAST(GETDATE() AS TIME);

二、日期提取函数

从日期中提取年、月、日或星期信息。

-- MySQL
SELECT 
    YEAR('2025-03-15') AS year,
    MONTH('2025-03-15') AS month,
    DAY('2025-03-15') AS day,
    DAYOFWEEK('2025-03-15') AS dow;  -- MySQL返回1-7(周日为1)

-- SQL Server
SELECT 
    YEAR('2025-03-15') AS year,
    MONTH('2025-03-15') AS month,
    DAY('2025-03-15') AS day,
    DATEPART(WEEKDAY, '2025-03-15') AS dow;

-- 获取星期名称
-- MySQL
SELECT DAYNAME('2025-03-15');  -- Saturday

-- SQL Server
SELECT DATENAME(WEEKDAY, '2025-03-15');  -- Saturday

三、日期加减计算

MySQL使用DATE_ADDDATE_SUB,SQL Server用DATEADD

-- MySQL
SELECT DATE_ADD('2025-03-15', INTERVAL 10 DAY);  -- 2025-03-25
SELECT DATE_SUB('2025-03-15', INTERVAL 10 DAY);  -- 2025-03-05

-- SQL Server
SELECT DATEADD(DAY, 10, '2025-03-15');  -- 2025-03-25
SELECT DATEADD(DAY, -10, '2025-03-15');  -- 2025-03-05

四、日期差计算

计算天数差时,MySQL用DATEDIFF,SQL Server用DATEDIFF

MySQL的TIMESTAMPDIFF可计算月或年差。

-- 天数差
-- MySQL
SELECT DATEDIFF('2025-03-20', '2025-03-15');  -- 5

-- SQL Server
SELECT DATEDIFF(DAY, '2025-03-15', '2025-03-20');  -- 5

-- 月/年差(MySQL)
SELECT 
    TIMESTAMPDIFF(MONTH, '2024-01-15', '2025-03-15') AS months_diff,  -- 14
    TIMESTAMPDIFF(YEAR, '2020-03-15', '2025-03-15') AS years_diff;    -- 5

五、日期格式化

MySQL用DATE_FORMAT,SQL Server用FORMAT

格式符略有不同,如年用%Y(MySQL)、yyyy(SQL Server)。

-- 示例:2025-03-15 14:30:25 → 2025年03月15日 14:30:25
-- MySQL
SELECT DATE_FORMAT(NOW(), '%Y年%m月%d日 %H:%i:%s');

-- SQL Server
SELECT FORMAT(GETDATE(), 'yyyy年MM月dd日 HH:mm:ss');

六、日期与字符串转换

字符串转日期时,MySQL用STR_TO_DATE,SQL Server用CONVERT

日期转字符串时,MySQL用DATE_FORMAT,SQL Server用CONVERT

-- 字符串 → 日期
-- MySQL
SELECT STR_TO_DATE('2025-03-15', '%Y-%m-%d');

-- SQL Server
SELECT CONVERT(DATE, '2025-03-15', 23);  -- 23对应yyyy-mm-dd

-- 日期 → 字符串
-- MySQL
SELECT DATE_FORMAT(NOW(), '%Y%m%d');

-- SQL Server
SELECT CONVERT(VARCHAR, GETDATE(), 112);  -- 112对应yyyymmdd

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值