2016-12-12 4 views
2

Мне нужно вернуть 1 между 1-м и 14-м и first day of next month для любого другого, исходя из текущего дня.Почему в случае сбоя при изменении даты

я могу запустить очень простой случай, когда оператор:

select 
case when datepart(d, getdate()) between 2 and 14 then '1' 
     else '1st next month' end 

, который возвращает 1 или 1-ый в следующем месяце, как ожидается, и я могу получить фактический первый день следующего месяца легко, а также:

select DATEADD(d, 1, EOMONTH(getdate())) 

, но когда я его совмещаю. Она не делает ничего не возвращает - не ошибка и никаких результатов независимо от того, какой день сегодня

select 
case when datepart(d, getdate()) between 2 and 14 then '1' 
     else DATEADD(d, 1, EOMONTH(getdate())) end 

у вас есть какие-либо идеи, почему?

+2

Ваш последний запрос будет бросать ошибку преобразования, так как один исход дела заявление является строкой, а другой является DateTime. – dfundako

+0

Здесь возвращаются 2 разных типа данных, один текст ''1'', одна дата – JohnHC

ответ

2

Чтобы избежать несоответствия типов данных, вывод как в виде текста:

select 
    case 
    when datepart(d, getdate()) between 2 and 14 then '1' 
    else convert(varchar, DATEADD(d, 1, EOMONTH(getdate())),120) 
    end 
Смежные вопросы