[英]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.