Date列中的空白值在运行SELECT语句时返回为1900/01/01

Ree*_*roi 5 sql sql-server replace date

列[PAYOFF DATE]有一些空白值和一些mm/dd/yy格式的值.

我必须用' - '替换'/'并将日期返回为yyyy-mm-dd.以下查询正在执行此操作.问题是,对于所有空白值,我得到结果为1900-01-01.

是否可以用null替换1900-01-01并返回yyyy-mm-dd格式的其他有效日期值?

我正在使用SQL Server.

SELECT
cast(replace(a.[PAYOFF DATE],'/','-') as date) 
FROM MTG a
Run Code Online (Sandbox Code Playgroud)

M.A*_*Ali 7

您不需要像在问题中显示的那样进行字符串操作.如果您以mm/dd/yyyy格式存储日期,则将其转换为DATE.

SELECT cast(a.[PAYOFF DATE] AS DATE) 
FROM MTG a 
Run Code Online (Sandbox Code Playgroud)

对于1900-01-01值,由于您要从字符串数据类型转换为Date,因此String数据类型可以具有空字符串,但Date数据类型不能具有空日期值,它可以具有日期值或NULL值.

因此,在将空字符串转换为日期之前,需要将空字符串转换为空字符串.1900-01-01只是sql server为您输入的默认值,因为Date数据类型不能为空值.

你可以通过做这样的事情来避免这个sql server的默认值.

SELECT cast(NULLIF(a.[PAYOFF DATE],'') AS DATE) 
FROM MTG a 
Run Code Online (Sandbox Code Playgroud)