LastLogindata
使用 SQL Server 2008。我有一个名为 User 的表,其中有一列datetimeoffset
数据类型
以下查询适用于生产服务器,但不适用于复制服务器。
select top 10 CAST(LastLoginDate AS DATETIME) from User.
我收到以下错误。将 datetimeoffset 数据类型转换为 datetime 数据类型导致值超出范围。
谢谢
LastLogindata
使用 SQL Server 2008。我有一个名为 User 的表,其中有一列datetimeoffset
数据类型
以下查询适用于生产服务器,但不适用于复制服务器。
select top 10 CAST(LastLoginDate AS DATETIME) from User.
我收到以下错误。将 datetimeoffset 数据类型转换为 datetime 数据类型导致值超出范围。
谢谢
检查 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
如果数据库中的字段是 typedatetimeoffset
类型,那么它应该包含 date 范围内0001-01-01 through 9999-12-31
。我认为问题是数据库中的日期。
请查看SQL server的官方链接点击这里
我是这样解决的。我将一个 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