Я пытаюсь использовать IIF (), чтобы вернуть приведение столбца в качестве даты, но только в том случае, если значение не является пустой строкой [значения не сохраняются как нулевые значения в базе данных, с которой я работаю].
Я пытался использовать ISNULL в качестве лучшего посредника, но, поскольку дата возвращается как 1900-01-01, она работает неправильно.Кажется, для работы с другими типами данных (int).
Пример таблицы
CREATE TABLE #temp_test (
[reg_dt] varchar(10)
)
insert into #temp_test SELECT ''
insert into #temp_test SELECT ''
insert into #temp_test SELECT ''
insert into #temp_test SELECT ''
INSERT INTO #temp_test select '20080509'
select * from #temp_test
Пример теста IIF (похоже, работает нормально, я также проверил inverse = '', 'false', 'true');когда я раскомментирую try_convert и удаляю 'true', возникает ошибка
SELECT IIF([reg_dt] != '', 'true'
--TRY_CONVERT(date, [reg_dt], 112)
, 'false') [reg_dt]
FROM [#temp_test];
Пример ISNULL (возвращает 1900-01-01)
SELECT ISNULL(TRY_CONVERT( DATE, [reg_dt], 112), '') [reg_dt] from [#temp_test]
Я ожидаю, что результат будетпустое значение, если существующее значение было пустым и, если нет, возвращаемое значение даты.Я думаю, что преобразование в дату перед проверкой на нулевые значения, вероятно, было бы лучше, потому что, если передана недопустимая дата (например, 31.04.2009), тогда она будет преобразована в пустое значение, которое является предпочтительной функциональностью в этом случае.
Приведенный ниже код работает, но я действительно не уверен, что это лучший способ сделать это.
select ISNULL(NULLIF(CONVERT(VARCHAR(10), CAST([reg_dt] as date), 112), '19000101'), '') as [reg_dt] from #temp_test