Ответ 1
CASE и CAST должны работать:
CASE WHEN mycol IS NULL THEN '' ELSE CONVERT(varchar(50), mycol, 121) END
У меня есть таблица, которая содержит значения "NULL", которые имеют тип "Datetime". Теперь мне нужно преобразовать их в пустую строку, но когда я использую функцию преобразования
ISNULL( [Accrued Out of Default] ,'' )
здесь начисляется значение по умолчанию типа datetime, что он изменяет значение null на '1900-01-01 00: 00: 00.000' вместо пустого
Затем я пытаюсь преобразовать их в varchar и применить те же
ISNULL(CONVERT(varchar(50), [Amort Into Default] ),'')
Теперь я могу преобразовать в пустую строку, но теперь эти datetime преобразуются в строку, которая мне нужна в datetime Поэтому я стараюсь 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 .
**
CASE и CAST должны работать:
CASE WHEN mycol IS NULL THEN '' ELSE CONVERT(varchar(50), mycol, 121) END
используя ISNULL, это лучший способ найти нулевое число:
ISNULL(CASE WHEN CONVERT(DATE, YOURDate) = '1900-01-01' THEN '' ELSE CONVERT(CHAR(10), YOURDate, 103) END, '') AS [YOUR Date]
declare @date datetime; set @date = null
--declare @date datetime; set @date = '2015-01-01'
select coalesce( convert( varchar(10), @date, 103 ), '')
Это также работает:
REPLACE(ISNULL(CONVERT(DATE, @date), ''), '1900-01-01', '') AS 'Your Date Field'
У меня было что-то подобное, и здесь (отредактированная) версия того, что я закончил, успешно использовал:
ISNULL(CONVERT(VARCHAR(50),[column name goes here],[date style goes here] ),'')
Вот почему это работает: если вы выберете дату NULL, она отобразит возврат NULL, хотя он действительно сохранен как 01/01/1900. Вот почему ISNULL в поле даты, когда вы работаете с любым типом данных даты, не будет рассматривать это как NULL, поскольку он технически не хранится как NULL.
Однако, как только вы преобразуете его в новый тип данных, он преобразует его как NULL, и в этот момент вы ISNULL будут работать так, как вы ожидаете, что он будет работать.
Я надеюсь, что это сработает и для вас!
~ Eli
Обновление почти через год:
У меня была аналогичная ситуация, когда мне нужен был вывод данных типа даты, и мое вышеупомянутое решение не сработало (оно работает только в том случае, если вам нужно, чтобы оно отображалось как дата, а не дата данных типа.
Если вам нужно, чтобы это был тип данных даты, есть способ обойти его, и это для того, чтобы вложить REPLACE
в ISNULL
, для меня работало следующее:
Select
ISNULL(
REPLACE(
[DATE COLUMN NAME],
'1900-01-01',
''
),
'') AS [MeaningfulAlias]
Select isnull(date_column_name,cast('1900-01-01' as DATE)) from table name
Вы можете попробовать следующее
выберите случай, когда mydatetime IS NULL THEN '' else convert (varchar (20), @mydatetime, 120) end как convert_date от 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
Надеюсь, это поможет!
select case when IsNull(CONVERT(DATE, StartDate),'')='' then 'NA' else Convert(varchar(10),StartDate,121) end from table1
Попробуйте использовать функцию DECODE
Пример: декодирование (MYDATE, NULL, '', MYDATE)
Если дата равна NULL, тогда отображается '' (BLANK), иначе отображается дата.
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
В этом запросе я определил результат, полученный с текущей даты дня.