【问题标题】:Change NULL values in Datetime format to empty string将日期时间格式的 NULL 值更改为空字符串
【发布时间】:2013-11-24 16:27:43
【问题描述】:

我有一个表,其中包含“日期时间”类型的“NULL”值。现在我必须将它们转换为空字符串,但是当我使用转换函数时

ISNULL( [Accrued Out of Default] ,'' )

这里的默认值是日期时间类型,它的作用是将 null 更改为 '1900-01-01 00:00:00.000' 而不是空

然后我尝试将它们转换为 varchar 并应用相同

ISNULL(CONVERT(varchar(50),  [Amort Into Default] ),'')

现在我可以转换为空字符串,但现在这些日期时间已转换为我在日期时间中需要的字符串 所以我尝试 CAST、CONVERT 但它们都不起作用。

CONVERT(Datetime,'ISNULL(CONVERT(varchar(50),  [Amort Into Default] ),'')',120)

这会出错。

有没有办法解决这个问题。

> **Solution Hi someone answered this to do as.
>      ISNULL(CONVERT(varchar(50),  [Amort Into Default] ,120),'') and it works  I dont know why .

**

【问题讨论】:

  • 在结果集中,一个字段的所有值都必须是相同的数据类型。因此,您不能将某些值输出为 VARCHAR,而将其他值输出为 DATETIME。您应该在客户端解析它或将所有值输出为 VARCHAR 类型。
  • datetime无法存储字符串。无法同时满足 a) 结果表达式的类型为 datetime 类型,以及 b) 行包含的内容不是有效的日期时间值或 NULL。

标签: sql-server sql-server-2008 datetime


【解决方案1】:
declare @mydatetime datetime
set @mydatetime = GETDATE() -- comment out for null value
--set @mydatetime = GETDATE()

select 
case when @mydatetime IS NULL THEN ''
else convert(varchar(20),@mydatetime,120)
end as converted_date

在这个查询中,我计算出结果来自当天的当前日期。

【讨论】:

    【解决方案2】:

    尝试使用函数DECODE

    例如:解码(MYDATE, NULL, ' ', MYDATE)

    如果日期为 NULL,则显示 ' ' (BLANK),否则显示日期。

    【讨论】:

      【解决方案3】:

      我有类似的东西,这是我最终成功使用的(经过编辑的)版本:

      ISNULL(CONVERT(VARCHAR(50),[column name goes here],[date style goes here] ),'')

      这就是为什么这样做:如果您选择一个为 NULL 的日期,它将显示返回 NULL,尽管它实际上存储为 01/01/1900。这就是为什么日期字段上的 ISNULL,当您使用任何日期数据类型时,不会将其视为 NULL,因为从技术上讲,它不会被存储为 NULL。

      但是,一旦将其转换为新的数据类型,它就会将其转换为 NULL,此时,您的 ISNULL 将按照您的预期工作。

      我希望这也适合你!

      ~伊莱

      近一年后更新:

      我遇到了类似的情况,我需要输出为日期数据类型,而我前面提到的解决方案不起作用(它仅在您需要将其显示为日期而不是日期数据时才有效输入。

      如果您需要它是日期数据类型,一种解决方法,即在@987654323 中嵌套REPLACE @,以下对我有用:

      Select 
          ISNULL(
              REPLACE(
                  [DATE COLUMN NAME],
                  '1900-01-01',
                  ''
              ),
          '') AS [MeaningfulAlias]
      

      【讨论】:

        【解决方案4】:
        Select isnull(date_column_name,cast('1900-01-01' as DATE)) from table name
        

        【讨论】:

          【解决方案5】:
          select case when IsNull(CONVERT(DATE, StartDate),'')='' then 'NA' else Convert(varchar(10),StartDate,121) end from table1
          

          【讨论】:

          • 请给你的代码添加一个解释(你可以缩进四个空格来创建一个代码块)。
          【解决方案6】:

          这也有效:

          REPLACE(ISNULL(CONVERT(DATE, @date), ''), '1900-01-01', '') AS 'Your Date Field'
          

          【讨论】:

          • 欢迎来到 Stack Overlow。将来,请考虑添加更多解释。
          【解决方案7】:
          declare @date datetime; set @date = null
          --declare @date datetime; set @date = '2015-01-01'
          
          select coalesce( convert( varchar(10), @date, 103 ), '')
          

          【讨论】:

          • 我做了和你类似的事情,虽然用 ISNULL 代替 COALESCE
          【解决方案8】:

          你可以试试下面的

          选择 mydatetime 为 NULL THEN '' 的情况 否则转换(varchar(20),@mydatetime,120) 以 convert_date 结尾 来自某个表

          -- Testing it out could do --
          
          declare @mydatetime datetime
          set @mydatetime = GETDATE() -- comment out for null value
          --set @mydatetime = GETDATE()
          
          select 
          case when @mydatetime IS NULL THEN ''
          else convert(varchar(20),@mydatetime,120)
          end as converted_date
          

          希望这会有所帮助!

          【讨论】:

            【解决方案9】:

            使用 ISNULL 是我发现在日期中绕过 NULL 的最佳方法:

            ISNULL(CASE WHEN CONVERT(DATE, YOURDate) = '1900-01-01' THEN '' ELSE CONVERT(CHAR(10), YOURDate, 103) END, '') AS [YOUR Date]
            

            【讨论】:

            • 这对我来说非常有用。我有一些案例陈述可以计算出我想要的日期,并将 1900-01-01 日期保留在临时表中,然后将此行应用于临时表上选择的每个适用行。我这样做只是因为我只使用 13 列;除了我会做其他事情之外,它更干净,更具可读性。
            • 为什么要调用 CONVERT 两次?您只需要评估 IS NULL,就像@Bohemian 的答案
            • 效果很好。只需要注意日期格式。
            • 能否在 SSIS 表达式中使用相同的逻辑?如果是的话如何制定
            【解决方案10】:

            CASE 和 CAST 应该可以工作:

            CASE WHEN mycol IS NULL THEN '' ELSE CONVERT(varchar(50), mycol, 121) END
            

            【讨论】:

              猜你喜欢
              • 2022-07-04
              • 2020-06-27
              • 2021-05-07
              • 2014-08-10
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-10-24
              相关资源
              最近更新 更多