一尘不染

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

sql

[PAYOFF DATE]列具有一些空白值和一些以mm / dd / yy格式表示的值。

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

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

我正在使用SQL Server。

SELECT
cast(replace(a.[PAYOFF DATE],'/','-') as date) 
FROM MTG a

阅读 271

收藏
2021-03-10

共1个答案

一尘不染

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

SELECT cast(a.[PAYOFF DATE] AS DATE) 
FROM MTG a

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

因此,您需要先将空字符串转换为null,然后再将其转换为日期。1900-01-01只是sql server为您输入的默认值,因为Date数据类型不能有空值。

您可以通过执行以下操作避免使用此sql server默认值。

SELECT cast(NULLIF(a.[PAYOFF DATE],'') AS DATE) 
FROM MTG a
2021-03-10