SQL Server中基于DATETIME列值新增查询列的实现方法
SQL Server 实现动态计算列的方案
支持情况
SQL Server完全支持这种需求——不需要修改原表,仅通过查询就能在结果里新增动态计算的列。
实现方式
SQL里用CASE语句就能实现类似IF的条件判断逻辑,刚好满足你的需求:
基础写法
假设原查询返回的DATETIME列叫dt_col,直接这么写就行:
SELECT CASE -- 提取小时部分,判断是否在19到22之间(对应19:00-23:00区间) WHEN DATEPART(HOUR, dt_col) BETWEEN 19 AND 22 THEN 2 -- 不符合条件时可以返回NULL、0或者其他值,按需调整 ELSE NULL END AS new_column FROM -- 替换成你的原表名或者原查询语句 your_source;
细节说明
DATEPART(HOUR, dt_col)是用来从DATETIME值里提取小时数的函数- 之所以用
BETWEEN 19 AND 22,是因为19点到22点59分59秒都属于19:00-23:00区间;如果需要包含23:00整,可以改成BETWEEN 19 AND 23,但要注意别把23:00之后的时间也包含进去 CASE就是SQL里的条件判断工具,完美替代你想要的IF逻辑
复杂查询适配
如果你的原查询是复杂子查询,把它嵌套进去就行:
SELECT CASE WHEN DATEPART(HOUR, dt_col) BETWEEN 19 AND 22 THEN 2 ELSE NULL END AS new_column FROM ( -- 这里放你的原查询语句 SELECT your_datetime_column AS dt_col FROM your_table WHERE ... ) AS sub_query;
内容的提问来源于stack exchange,提问作者Wolowizard
相关产品推荐
相关产品推荐

