将datetimeoffset数据类型转换为日期时间数据类型会导致超出范围的值

时间:2012-07-11 16:02:08

标签: sql-server datetimeoffset

使用SQL Server 2008.I有一个名为User的表,其中LastLogindata列为datetimeoffset数据类型

以下查询适用于生产服务器,但不适用于复制服务器。

select top 10 CAST(LastLoginDate AS DATETIME)  from User.

我收到以下错误。将datetimeoffset数据类型转换为日期时间数据类型会导致超出范围的值。

由于

3 个答案:

答案 0 :(得分:3)

检查LastLoginDate列的值,如'0001-01-01'或'0001/01/01'。

如果你有意思得到这个错误..

试试这个

select top 10  CAST(CASE when cast(LastLoginDate  as varchar) = '0001-01-01 00:00:00' 
                         THEN NULL ELSE GETDATE() end AS DATETIME) from User

答案 1 :(得分:0)

如果数据库中的字段类型为datetimeoffset,则该字段应包含0001-01-01 through 9999-12-31范围内的日期。我认为问题在于数据库中的日期。

请检查SQL Server Click Here的官方链接

答案 2 :(得分:0)

我这样解决了。我有一个nvarchar(max)列转换为xml,并使用T-SQL表达式ISDATE()排除了where子句中的错误行。

where cast(DataObject as xml).value('(/DataObjects/@LastLoginDate)[1]', 'varchar(10)') is not null
and isdate(cast(DataObject as xml).value('(/DataObjects/@LastLoginDate)[1]', 'varchar(10)')) = 1