简体   繁体   English

SQL Server:如果“ datetime2” <1753,那么“ datetime”为NULL?

[英]SQL Server: if “datetime2” < 1753, then “datetime” NULL?

My intention is to insert data from source table into target table. 我的意图是将数据从源表插入目标表。 Source table has datetime2 column and target table has datetime column. 源表具有datetime2列,目标表具有datetime列。 If datetime2 value does not fit (< year 1753) into datetime field, it will be converted to null . 如果datetime2值不适合(<1753年)到datetime字段中,则它将转换为null Here is an example 这是一个例子

DROP TABLE dbo.test1
--source table
CREATE TABLE dbo.test1 (wday DATETIME2 NULL)
go

INSERT  INTO dbo.test1
        (wday
        )
        SELECT  '2008-02-01 00:00:00.000'
        UNION ALL
        SELECT  '2009-02-01 00:00:00.000'
        UNION ALL
        SELECT  '0001-02-01 00:00:00.000'

DROP TABLE dbo.test2
--target table
CREATE TABLE dbo.test2 (wday DATETIME NULL)
go

--insert only valid datetime dates, < 1753 will be converted to nulls
INSERT INTO dbo.test2
        (wday
        )
        SELECT  CASE WHEN DATEDIFF(YEAR, dbo.test1.wday, GETDATE()) < 111
                     THEN NULL
                     ELSE CAST(dbo.test1.wday AS DATETIME)
                END
        FROM    dbo.test1

The code does not work. 该代码不起作用。 Also using datediff here is not valid logic, how to implement this? 同样在这里使用datediff是无效的逻辑,如何实现呢?

why not just 为什么不只是

INSERT  dbo.test2
        (wday
        )
        SELECT  CASE WHEN dbo.test1.wday < '17530101'
                     THEN NULL
                     ELSE CAST(dbo.test1.wday AS DATETIME)
                END
        FROM    dbo.test1

Another option: 另外一个选项:

--insert only valid datetime dates, < 1753 will be converted to nulls
INSERT INTO dbo.test2
        (wday
        )
        SELECT  CASE WHEN DATEPART(YEAR, dbo.test1.wday) < 1753
                     THEN NULL
                     ELSE CAST(dbo.test1.wday AS DATETIME)
                END
        FROM    dbo.test1

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM