SQL Server提取当日特定时段订单并转换日期格式的实现
解决SQL Server日期筛选与格式转换需求
没问题,我来帮你搞定这个SQL Server的日期处理需求!咱们分两步走:先筛选符合时间范围的订单,再把日期转成你要的格式,具体实现方案如下:
方法一:直接用时间类型比较(直观易读)
这种方式直接提取Order_Date的时间部分做范围判断,代码逻辑一目了然:
SELECT -- 转换为指定格式输出 FORMAT(Order_Date, 'yyyy-MM-dd hh:mm:ss') AS Formatted_Order_Date, -- 这里可以添加你需要输出的其他列 * FROM Your_Table_Name -- 替换成你的实际表名 WHERE -- 筛选当日14:00前的订单 CAST(Order_Date AS TIME) < '14:00:00' -- 同时筛选当日15:00至23:00的订单 OR CAST(Order_Date AS TIME) BETWEEN '15:00:00' AND '23:59:59'
小说明:
CAST(Order_Date AS TIME):把原datetime列的时间部分单独提取出来,方便直接和时间字符串对比。FORMAT(Order_Date, 'yyyy-MM-dd hh:mm:ss'):SQL Server 2012及以上版本支持这个函数,能直接生成你要的格式。如果你的版本低于2012,改用下面的拼接方式也能实现:
这里CONVERT(VARCHAR(10), Order_Date, 23) + ' ' + CONVERT(VARCHAR(8), Order_Date, 108) AS Formatted_Order_Date23对应yyyy-MM-dd的日期格式,108对应HH:mm:ss的时间格式,拼接后就是你要的完整格式(如果需要12小时制的hh,可以额外处理小时部分)。
方法二:用DATEPART提取小时数判断
如果需要更精细的时间控制,也可以提取小时数来做条件筛选:
SELECT FORMAT(Order_Date, 'yyyy-MM-dd hh:mm:ss') AS Formatted_Order_Date, * FROM Your_Table_Name WHERE DATEPART(HOUR, Order_Date) < 14 OR (DATEPART(HOUR, Order_Date) >= 15 AND DATEPART(HOUR, Order_Date) <= 23)
小说明:
DATEPART(HOUR, Order_Date):获取订单日期的小时数(0-23),直接和数值对比就能完成时间范围筛选。
额外提醒
- 如果你的
Order_Date是字符串类型(不是datetime),得先转成datetime再处理,比如用CONVERT(DATETIME, Order_Date, 103)(103对应dd/MM/yyyy的格式)。 - 如果要严格限定某一天的订单,在WHERE里再加个日期筛选就行,比如
CAST(Order_Date AS DATE) = '2018-05-14'。
内容的提问来源于stack exchange,提问作者Bilal
相关产品推荐
相关产品推荐

