【问题标题】:How do I select a date field when NULL is present?存在 NULL 时如何选择日期字段?
【发布时间】:2013-12-18 01:04:41
【问题描述】:

我正在尝试使用 ISNULL 在查询中选择日期字段,但是当存在 NULL 值而不是实际日期时,结果默认为 1900-01-01 00:00:00。基本上,如果日期字段为空,我不希望显示任何内容,并且当它不是空时显示那里填充的内容。

选择 isnull(date_field,'') 从表名

【问题讨论】:

    标签: datetime


    【解决方案1】:

    您没有说您使用的是哪个数据库。您可能想尝试:

    select if(isnull(date_field) or date_field = '1900-01-01 00:00:00', null, date_field) from table_name;

    【讨论】:

    • 很抱歉。我正在使用 MS SQL Server 2008。我正在尝试构建一个包含多个日期列/字段的报告。我在选择行中选择的所有字段都使用 isnull(column,'') 很好地填充,如果值为 NULL,则基本上将其设为空白,日期字段除外。也许将日期字段转换为不同的数据类型?
    • 作为对此的跟进,我能够使用从上述链接中提取的以下内容并且它有效:CASE WHEN CONVERT(DATE, CreatedDate) = '1900-01-01' -- to考虑到意外时间 THEN '' ELSE CONVERT(CHAR(10), CreatedDate, 120) + ' ' + CONVERT(CHAR(8), CreatedDate, 108) END 我正在转换的字段是 smalldatetime 字段。当我尝试仅在日期数据类型字段上使用它时,它不起作用。有没有办法对日期数据类型使用相同的想法?
    • 我将发布一个单独的问题,其中包含有关它如何在 smalldatetime 中工作以及您希望它如何在约会中工作的具体示例。如果您适当地标记您的问题,您将获得更多答案。尝试用“sql”和“sql-server”标记它。
    【解决方案2】:

    谷歌翻译器可以全面理解你不懂英语的地方。

    null,如果排除则查询

    => 从 DATE_FIELD 不为空的表名中选择 DATE_FIELD

    如果您希望默认值为 null

    => 从表名中选择 NVL(DATE_FIELD, '1900-01-01')

    => SELECT NVL(DATE_FIELD, TO_CHAR(SYSDATE, 'yyyymmdd HH24:MI:SS')) 从表名中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-23
      • 1970-01-01
      • 2013-04-27
      • 1970-01-01
      • 2020-11-23
      • 2015-05-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多