【发布时间】:2019-09-20 02:29:00
【问题描述】:
我遇到了一个错误
将 varchar 数据类型转换为 datetime 数据类型导致值超出范围
当我尝试从 SQL Server 2016 中的表中获取一周前的数据时。
我表中的日期列的数据类型为varchar。因此,在我的查询中,我尝试先将其转换为 datetime 并获得 1 周后的结果。
SELECT
USERNAME, UDATE
FROM
SAP_CDHDR
WHERE
CAST(UDATE AS DATETIME) >= DATEADD(day, -7, CAST(GETDATE() AS DATE))
示例输入:
USERNAME UDATE
--------------------------
User 1 26.07.2017
User 2 02.05.2017
User 3 08.12.2017
User 4 15.07.2016
User 5 20.10.2016
【问题讨论】:
-
理想情况下,您应该修复您的数据。将日期存储为
varchar只会导致问题。varchar的操作与date非常不同。例如,在您的数据中,02.05.2017'是该表中的“最早”“日期”。虽然,正如 Gordon 所示,您可以CONVERT该值将对性能产生(显着)影响。 -
获取日期()函数,你的数据类型不相等......你应该使用函数来改变数据......像转换。转换有 3 部分...
标签: sql sql-server