【发布时间】:2021-04-16 09:14:21
【问题描述】:
我正在尝试从 vis_p_activities_final 表中获取最近几个月的数据,并尝试了以下查询:
SELECT * FROM DPICD.vis_p_activities_final
WHERE DPICD.vis_p_activities_final.current_activity_code IN (
'SDBPR', 'SDBPU', 'XSDBPU', 'SDBPUX' )
AND CAST((DPICD.vis_p_activities_final.raised_date_time) AS DATETIME) >=
Dateadd(month, -1, CURRENT_TIMESTAMP)`
raised_date_time 列是 VARCHAR,我想将其转换为过滤器的日期时间。我该怎么做?
【问题讨论】:
-
为什么
DPICD.vis_p_activities_final.raised_date_time1还不是日期时间?此外,3+ part naming for columns is to be deprecated 在 SQL Server 中;给你的对象起别名并用它来限定你的列。 -
因为输出视图要求 raise_date_time 为 varchar
-
这本身就是一个设计缺陷。很明显,该语句自相矛盾,因为如果它“需要”成为
varchar,那么您不应该尝试在 SQL 中将其视为datetime。根据定义,varchar不是datetime。问题是你的设计;解决这个问题,问题就会消失。 -
@Mazil_tov998 什么输出视图?您确定有任何此类要求还是客户端代码应该简单地更改显示格式?将日期存储为字符串是你能做的最糟糕的事情
-
请阅读this,了解一些改进问题的技巧。 DDL 和示例数据将帮助我们帮助您。也许indexed computed column 会提供更好的性能。而“最后几个月”[sic] 有点模糊。
标签: sql tsql datetime casting type-conversion