You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL时间戳格式转换及当前日期筛选问题求助

解决SQL Server日期格式转换与当日订单筛选问题

看起来你在SQL Server里处理日期格式和当日订单筛选时遇到了两个关键问题,我来一步步帮你梳理解决:

1. 日期格式转换的正确方式

你提到用Select convert(varchar,DDCTMS,101) as Entered from OCRI没得到想要的YYYY-MM-DD格式,这是因为样式101对应的是MM/DD/YYYY格式(比如05/09/2020),并非你需要的YYYY-MM-DD。

如果要准确转换为YYYY-MM-DD格式,推荐两种更规范的写法:

  • 使用样式23(专门对应YYYY-MM-DD格式):
    SELECT CONVERT(varchar(10), DDCTMS, 23) AS Entered FROM OCRI
    
  • 或者直接将字段转为date类型(SQL Server 2008及以上版本支持),系统会自动输出YYYY-MM-DD格式:
    SELECT CAST(DDCTMS AS date) AS Entered FROM OCRI
    

你之前用Select CONVERT(varchar(10), DDCTMS) as Entered from Ocri成功转换,本质是SQL Server默认将datetime类型转字符串时,前10位恰好是YYYY-MM-DD,但这种写法依赖默认行为,不如指定样式更可靠。

2. 筛选当日订单的正确方法

你遇到的'curdate' is not a recognized built-in function name错误,是因为curdate()是MySQL的内置函数,SQL Server中没有这个函数,对应的替代方案有两种:

方法一:利用日期范围筛选(性能更优,可复用索引)

如果DDCTMS是datetime类型,直接比较日期范围比转换字段更高效,还能利用字段上的索引:

SELECT CONVERT(varchar(10), DDCTMS, 23) AS Entered 
FROM OCRI 
WHERE DDCTMS >= CAST(GETDATE() AS date) 
  AND DDCTMS < DATEADD(day, 1, CAST(GETDATE() AS date))

这个写法会筛选出从今日00:00:00到次日00:00:00之间的所有记录,完美匹配当日订单。

方法二:转换字段为date类型后比较

如果追求代码简洁,也可以将DDCTMS转为date类型,再和当前日期对比:

SELECT CONVERT(varchar(10), DDCTMS, 23) AS Entered 
FROM OCRI 
WHERE CAST(DDCTMS AS date) = CAST(GETDATE() AS date)

注意:这种写法如果DDCTMS上有索引,可能无法被数据库利用,数据量大时性能会受影响,因此优先推荐方法一。

另外,SQL Server里获取当前日期的函数还有CURRENT_TIMESTAMP(和GETDATE()功能一致)、DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), DAY(GETDATE()))(手动构造当日日期),你可以根据习惯选择使用。

内容的提问来源于stack exchange,提问作者Carlos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 16:17:38