Случай и предложение IF в сервере sql - PullRequest
0 голосов
/ 11 января 2019

Мне нужно указать 0, если месяц и день меньше 10 (Or Single Digit value). Когда я использую оператор IF, он работает, но в операторе CASE он делает сложение.

IF Statement

IF Month(getdate()) < 10
 Begin 
 select '0' + cast(Month(getdate()) as varchar(10))
 END
Else
BEGIN
  select month(getdate())
END

CASE Ведомость

SELECT 
CASE
    WHEN(
        CAST(Month(getdate()) as varchar(10)) < 10
    ) THEN '0' + cast(Month(getdate()) as varchar(10))
    ELSE (Month(getdate()))
END

Ответы [ 3 ]

0 голосов
/ 11 января 2019

Вам не нужны такие строковые манипуляции. Команда FORMAT , представленная в SQL Server 2012, позволяет писать:

select format (getdate(),'MM')

Строка формата аналогична строкам формата .NET. Например, если вы хотите отформатировать число с использованием начального нуля или необязательно, вы можете использовать 0 или #:

select format(5,'##'),format(5,'00')

Возвращает 5, 05.

Вы также можете использовать стандартные спецификаторы формата, например:

select format(getdate(),'s'), format(getdate(),'u')

Возврат 2019-01-11T10:28:41, 2019-01-11 10:28:41Z

Вы отметили вопрос SQL Server 2017, что означает, что вы можете использовать FORMAT без проблем.

0 голосов
/ 11 января 2019

Надеюсь, что это поможет.

DECLARE @MONTH AS NVARCHAR(2)

SET @MONTH = CONVERT(NVARCHAR(2), MONTH(GETDATE()))

IF(LEN(@MONTH) = 1)
    BEGIN
        SELECT '0' + @MONTH
    END

SELECT 
    CASE WHEN(LEN(@MONTH) = 1) THEN '0' + @MONTH
    ELSE
        @MONTH
    END

Удачи.

0 голосов
/ 11 января 2019

Разница в том, что на CASE вы сравниваете результат VARCHAR (приведения) функции MONTH, тогда как в IF вы сравниваете его как INT.

Просто снимите приведение к varchar при сравнении:

SELECT 
    CASE WHEN Month(getdate()) < 10 THEN '0' + cast(Month(getdate()) as varchar(10))
    ELSE Month(getdate())
END

Может быть упрощено следующим образом:

SELECT RIGHT('0' + CONVERT(VARCHAR(2), MONTH(GETDATE())), 2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...