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

Posted

技术标签:

【中文标题】在运行 SELECT 语句时,日期列中的空白值返回为 1900/01/01【英文标题】:Blank values in Date column returning as 1900/01/01 on running SELECT statement 【发布时间】:2014-05-23 06:44:53 【问题描述】:

[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

【问题讨论】:

这可能会让您走上正轨。您可以将 Datetime 转换为字符串,因为 datetime 不能返回空值。 ***.com/questions/15554369/… @sealz - 我已经查看了该链接,但在我的情况下,我必须做两件事,首先将“/”替换为“-”,然后在日期为 1900-01-时返回 NULL- 01 因此,我在一个语句中同时执行这两个操作时遇到问题。 【参考方案1】:

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

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

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

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

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

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

【讨论】:

【参考方案2】:

CASE WHEN [Pay Date] = '' THEN NULL ELSE TRY_CONVERT(DATE, [Pay Date]) END

【讨论】:

以上是关于在运行 SELECT 语句时,日期列中的空白值返回为 1900/01/01的主要内容,如果未能解决你的问题,请参考以下文章

填补熊猫数据框中的日期空白

返回列中给定值的第一行 - BigQuery

查找 ID 列中的空白 + 选择上一个/下一个日期列

函数中的 SELECT 语句 - 别名、with、临时表...等

当必须使用同一列中的不同值填充单元格时,如何填写该列中的空白单元格?

SQL Select:获取列中的上一个日期