在运行 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的主要内容,如果未能解决你的问题,请参考以下文章
函数中的 SELECT 语句 - 别名、with、临时表...等