32

我有一个表,其中包含“日期时间”类型的“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 .

**

4

10 回答 10

46

CASE 和 CAST 应该可以工作:

CASE WHEN mycol IS NULL THEN '' ELSE CONVERT(varchar(50), mycol, 121) END
于 2013-11-12T13:50:17.043 回答
12

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

ISNULL(CASE WHEN CONVERT(DATE, YOURDate) = '1900-01-01' THEN '' ELSE CONVERT(CHAR(10), YOURDate, 103) END, '') AS [YOUR Date]
于 2013-11-12T14:55:08.577 回答
7
declare @date datetime; set @date = null
--declare @date datetime; set @date = '2015-01-01'

select coalesce( convert( varchar(10), @date, 103 ), '')
于 2015-06-12T10:29:16.633 回答
3

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

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

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

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

我希望这对你也有效!

~以利

更新,将近一年后:

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

如果您需要它是 date 数据类型,有一种方法可以解决它,这是在 a 中嵌套 a REPLACEISNULL以下对我有用:

Select 
    ISNULL(
        REPLACE(
            [DATE COLUMN NAME],
            '1900-01-01',
            ''
        ),
    '') AS [MeaningfulAlias]
于 2016-11-16T19:38:13.387 回答
2

这也有效:

REPLACE(ISNULL(CONVERT(DATE, @date), ''), '1900-01-01', '') AS 'Your Date Field'
于 2015-11-24T22:36:15.260 回答
1
select case when IsNull(CONVERT(DATE, StartDate),'')='' then 'NA' else Convert(varchar(10),StartDate,121) end from table1
于 2017-04-04T13:01:49.227 回答
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

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

于 2019-09-17T18:21:58.557 回答
1
Select isnull(date_column_name,cast('1900-01-01' as DATE)) from table name
于 2017-04-14T07:22:13.957 回答
0

You could try the following

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

-- 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

Hope this helps!

于 2013-11-12T15:05:41.250 回答
0

尝试使用函数 DECODE

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

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

于 2019-03-22T15:11:09.090 回答