当前位置: 首页 > 面试题库 >

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

段干英杰
2023-03-14
问题内容

[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为您输入的默认值,因为Date数据类型不能有空值。

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

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


 类似资料:
  • 问题内容: 我正在使用具有以下格式mm / dd / yyyy的jquery datepicker,但我需要它是sql数据库的yyyy-mm-dd,所以我正在使用它。 与以下 不幸的是,无论输入什么,我都会在数据库中注册1970-01-01。有什么想法我做错了吗?非常感谢你的帮助。 问题答案: 当您从那里回来时,意味着时间戳不正确。该日期是UNIX时代。 当涉及到Javascript(在这种情况下

  • 问题内容: 我要插入具有自动递增键字段的SQLServer表。(我相信这在SQLServer中称为IDENTITY列。) 在Oracle中,我可以使用RETURNING关键字为INSERT语句提供一个类似于SELECT查询的结果集,该结果集将返回生成的值: 如何在SQLServer中完成此操作? 奖励 :好的,到目前为止,很好的答案,但是,如果可能的话,如何将其放入单个语句中?:) 问题答案: 通

  • 我使用SSIS包导入一个基本文本文件,它有3个日期字段,有时一些日期字段是空的。 导入的表显示空字段,我想是因为它们是varchar(50)数据类型。但是我需要将该表中的记录插入到另一个表中,其中这些列被定义为Date数据类型。 当我运行insert语句时,目标表中的结果值都显示日期为1900-01-01,而不是NULL或空白。我试图强制该值为null,但无效: 如何使日期列只接受空白或空值?

  • 问题内容: 这是问题的简化:我有一个看起来像这样的选择: 并返回的数据快照看起来像这样 我想做的是,如果工作组是内部的,则选择不显示受让人的名称。而是显示工作流。 因此,例如,我想要实现的结果将是这样的: 我希望这是有道理的?基本上是一个条件选择,可以检测某个列是否包含某个值,然后用[whatever]替换另一个列的值。 提前致谢! 编辑我想实现这样的事情: 问题答案: 您没有提到您的DBMS,但

  • 请看一下查询: 基本上,我希望查询获取TableA上的最新条目(列ID是AI),条件是列A='foo'。 查询将顺利运行并返回我需要的内容。如果没有与条件ColumnA='foo'匹配的表项,则结果为空。 说到这里,我添加了一个CASE来返回1。否则,返回Id。下面是新的查询: 使用给定的查询,如果条件为false,则不会有任何结果。它是空白的。甚至不是空的。 问题是,这是为什么?在我看来,结果应

  • 问题内容: 在我的创建表脚本中,我已将hasMultipleColors字段定义为BIT: 运行INSERT时,不会对此字段或其他BIT字段引发警告,但是选择行将显示所有BIT值均为空白。 从命令行手动尝试更新这些记录会产生奇怪的效果-显示该记录已匹配并已更改(如果适用),但始终显示为空白。 服务器版本:5.5.24-0ubuntu0.12.04.1(Ubuntu) 有什么想法吗? 问题答案: 您