sql 中 year 用法_sql 中 year 函数提取年份方法

说白了,YEAR函数就是从日期里直接抠出年份,用起来贼简单但别掉坑里。

先说最重要的,比如去年我们跑那个电商报表项目,光用YEAR(order_date)就轻松把2 02 3 年的订单拎出来了,直接跟COUNT()组合,秒出年维度统计。
另外一点,它跟MONTH、DAY搭配绝了,去年有个场景要按季度算,就写成YEAR(order_date)=2 02 3 AND MONTH(order_date)<4>还有个细节挺关键的,用MySQL时它对DATE和DATETIME都兼容,但SQL Server那边函数选择就多,用YEAR其实有点大材小用,直接上DATEPART(year, order_date)更灵活。
说实话挺坑的,有人以为传个'2 02 3 -01 '这种非标准格式也能转年份,结果直接报错,必须保证是完整日期格式。

我一开始也以为YEAR函数慢,因为每次查询都去解析日期,后来发现对索引列用范围查询更快,比如WHERE order_date BETWEEN '2 02 3 -01 -01 ' AND '2 02 3 -1 2 -3 1 '根本不用转年份。
等等,还有个事,如果表数据量千万级,建议用触发器把年份存成整数列再关联,否则GROUP BY YEAR()会拖垮整个集群。

建议多试试用YEAR配合EXISTS做存在性判断,比如查某年是否有订单,比直接WHERE YEAR(date)=2 02 3 快不少。

sql 中 getdate 用法_sql 中 getdate 获取系统日期技巧

GETDATE()是SQL Server获取当前本地时间的函数,返回datetime类型。

用法: SELECT GETDATE(); 返回值示例:2 02 3 -1 0-2 5 1 4 :3 0:4 5 .1 2 3
场景: 1 . 插入记录时设置创建时间: INSERT INTO Orders(ProductID, OrderDate) VALUES(1 01 , GETDATE());
2 . 更新记录时设置修改时间: UPDATE Customers SET LastLogin = GETDATE() WHERE CustomerID = 1 001 ;
3 . 设置表列默认值为当前时间: ALTER TABLE Logs ADD LogTime DATETIME DEFAULT GETDATE();
注意事项: 1 . 与SYSDATETIME()区别:返回datetime2 类型,精度达1 00纳秒。
SELECT SYSDATETIME(); -
示例:2 02 3 -1 0-2 5 1 4 :3 0:4 5 .1 2 3 4 5 6 7
2 . 与GETUTCDATE()区别:返回UTC时间,避免时区问题。
SELECT GETUTCDATE(); -
示例:2 02 3 -1 0-2 5 06 :3 0:4 5 .1 2 3 (UTC)
3 . 与CURRENT_TIMESTAMP区别:ANSI SQL标准函数,行为同GETDATE()。

避免: 在WHERE子句中对列使用GETDATE()导致索引失效。
错误示例: SELECT FROM Orders WHERE CAST(OrderDate AS DATE) = CAST(GETDATE() AS DATE);
正确做法: SELECT FROM Orders WHERE OrderDate >= CAST(GETDATE() AS DATE) AND OrderDate < DATEADD>提醒:复杂业务逻辑的时间处理建议在应用层完成。