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

时间:2016-06-20 16:38:28

标签: sql sql-server

运行时异常:

  

将nvarchar数据类型转换为日期时间数据类型   导致了超出范围的价值。

代码:

INSERT INTO [Migrated].[dbo].[MyTables] (LegacyId,DeedDate)
    SELECT DISTINCT 
        a.[IPLID], CONVERT(nvarchar(255), a.[Deeddate], 127) 
    FROM 
        [Legacy].[dbo].[MyTables2] as a
  • MyTables - > DeedDate datetime Allow Null
  • MyTables2 - > Deeddate nvarchar(255)Allow Null

希望我做得正确。但为什么它会出现上述错误?

我正在使用SQL Server 2014 express。

注意:您能否告诉我如何找出MyTables2 Deeddate上的错误?我的意思是不同的日期格式等等。或者用NULL替换这些日期。

2 个答案:

答案 0 :(得分:2)

我使用ISDATE function找出了缺陷日期并将其删除。之后就可以了。感谢:)

这样就可以了:

INSERT INTO [Migrated].[dbo].[MyTables] (LegacyId,DeedDate)
    SELECT DISTINCT 
        a.[IPLID], CONVERT(nvarchar(255), a.[Deeddate], 127) 
    FROM 
        [Legacy].[dbo].[MyTables2] as a

答案 1 :(得分:0)

在SQL Server 2012+中,您可以使用TRY_CONVERT()来返回NULL而不是错误:

INSERT INTO [Migrated].[dbo].[MyTables](LegacyId, DeedDate)
    SELECT DISTINCT a.[IPLID], TRY_CONVERT(nvarchar(255), a.[Deeddate], 127)
    FROM [Legacy].[dbo].[MyTables2] a;

您还可以使用它来确定格式不正确的位置:

SELECT a.*
FROM (SELECT a.[IPLID], a.[Deeddate],
             TRY_CONVERT(nvarchar(255), a.[Deeddate], 127) as datestr
      FROM [Legacy].[dbo].[MyTables2] a
     ) a
WHERE datestr IS NULL;