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

标签 sql sql-server date replace

[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

最佳答案

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

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

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

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

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

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

关于sql - 运行 SELECT 语句时,日期列中的空白值返回为 1900/01/01,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22973154/

相关文章:

java - RSS Feed,解析所有可能的日期

r - 根据 R 中的日期通过线性插值进行数据插补

sql-server - SQL Server复制算法

mysql - SQL在聚合函数的循环中获取列名

mysql - 如何管理一个巨大的数据库(MySQL)

sql - 在 Redshift 中有多个列的 WHERE IN

sql - 提取最后两个括号之间的正确字符串

sql-server - sql日期转换为字符串格式

c# - 对客户的 SQL Server 数据库更改

c# - Asp.Net Core 3.1 检索数据但未将其保存到数据库中