GETDATE()返回错误的日期时间格式

时间:2016-03-30 22:03:01

标签: sql-server datetime

我在SQL Server 2012中工作。我有一个具有日期列(Some_Date)的表,不幸的是,它创建为int。 (为什么还有其他问题。)我试图将它与使用GETDATE()的DATEADD的结果进行比较。所以,例如,我有:

SELECT TOP 1
CONVERT(datetime, CONVERT(varchar(8), Some_Date), 112)
FROM dbo.some_table

此查询以我想要的格式返回Some_Date值,即YYYY-MM-DD HH:MM:SS.SSS。我想要将它与之比较的变量是:

DECLARE @refdate datetime;
SET @refdate = DATEADD(month, -3, GETDATE());

当我在上面的查询中使用@refdate时,SQL会抛出转换错误。所以,我使用PRINT(@refdate)检查了@refdate的格式。它显示以下值:

Dec 30, 2015 5:00PM

我需要将此变量设置为与SOME_DATE的转换格式相同的格式。如何将日期时间变量的格式更改为所需格式?

更新: 抛出错误的查询是:

DECLARE @refdate datetime;
SET @refdate = DATEADD(month, -3, GETDATE());
SELECT TOP 1
Some_Date
FROM dbo.some_table
WHERE
CONVERT(datetime, CONVERT(varchar(8), Some_Date), 112) >= @refdate

1 个答案:

答案 0 :(得分:1)

CONVERT(datetime, CONVERT(varchar(8), Some_Date), 112)这导致了错误。

我认为Some_Date列中有一些无效值,而且全部都是。它可以是大于或等于8位的值。它与日期时间格式无关。请使用此查询进行检查:

select Count(*)
from dbo.some_table
where LEN(CONVERT(varchar(8), Some_Date)) <> 8