5

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

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

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

我收到以下错误。将 datetimeoffset 数据类型转换为 datetime 数据类型导致值超出范围。

谢谢

4

3 回答 3

4

检查 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
于 2013-10-24T13:36:38.660 回答
1

如果数据库中的字段是 typedatetimeoffset类型,那么它应该包含 date 范围内0001-01-01 through 9999-12-31。我认为问题是数据库中的日期。

请查看SQL server的官方链接点击这里

于 2019-03-26T12:01:51.033 回答
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
于 2019-03-30T16:06:05.710 回答