使用SQL Server 2008.I有一个名为User的表,其中LastLogindata
列为datetimeoffset
数据类型
以下查询适用于生产服务器,但不适用于复制服务器。
select top 10 CAST(LastLoginDate AS DATETIME) from User.
我收到以下错误。将datetimeoffset数据类型转换为日期时间数据类型会导致超出范围的值。
由于
答案 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