如何在 SQL Server 中将 NULL 插入 DATETIME coulmn 而不是 1900-01-01 00:00:00.000

Zhu*_*Zhu 1 sql sql-server sql-server-2014

我是 SQL Server 的新手,我正在尝试将日期插入到具有 DATETIMEas 数据类型。

当我将日期时间从 API 传递给存储过程时,它会插入我传递的值。但是如果我传递一个空字符串" ",它会插入一个默认值1900-01-01 00:00:00.000. 但我想插入,NULL如果数据是 " ".

我用谷歌搜索了很多,但找不到解决方案。

@DATEVAL1 DATETIME = '',
@DATEVAL1 DATETIME = ''

INSERT INTO TABLE (mDate1, mDate2)
VALUES (@DATEVAL1, @DATEVAL2);
Run Code Online (Sandbox Code Playgroud)

这是我的存储过程中的代码。

Sea*_*nge 5

当您将日期时间变量设置为空字符串时,会发生隐式转换。空字符串隐式转换为 1900-01-01。要么只声明变量而不给它们赋值,要么将它们显式设置为 NULL。

@DATEVAL1 DATETIME,
@DATEVAL2 DATETIME = NULL
Run Code Online (Sandbox Code Playgroud)

或者你可以使用 NULLIF。由于您从 API 接收这些值,因此您很可能必须使用 NULLIF。否则,将需要对 API 调用进行更改以发送 NULL 而不是空字符串。

Values( NULLIF(@DATEVAL1, '')
Run Code Online (Sandbox Code Playgroud)