Сравните дату с датой в SQL Server - PullRequest
0 голосов
/ 07 июня 2018

Я столкнулся с этой проблемой, когда SQL попросил меня указать псевдонимы при преобразовании символов в формат даты, вот мой запрос:

declare @dateTarget char(8) = '20130613'
declare @dateTarget2 char(8) = '20180608'
declare @dateNow as date = GETDATE()

IF CAST(CONVERT(DATE, 
                LEFT(@dateTarget, 4) + SUBSTRING(@dateTarget, 5, 2) + RIGHT(@dateTarget, 2))) >= CAST(@dateNow AS DATE) 
BEGIN
    PRINT 'Target cannot be greater than DateNow.'
END
ELSE IF CAST(CONVERT(DATE, LEFT(@dateTarget2, 4) + SUBSTRING(@dateTarget2, 5, 2) + RIGHT(@dateTarget2, 2))) >= CAST(@dateNow AS DATE) 
BEGIN
    PRINT 'Target2 cannot be greater than DateNow.'
END
ELSE
BEGIN
    PRINT 'ok'
END

, и вот ошибки, которые я получаю:

Сообщение 1035, Уровень 15, Состояние 10, Строка 5
Неверный синтаксис рядом с 'CAST', ожидаемый 'AS'.

Сообщение 156, Уровень 15, Состояние 1, Строка 9
Неверный синтаксис рядом с ключевым словом «ELSE».

Сообщение 1035, Уровень 15, Состояние 10, строка 9
Неверный синтаксис рядом с «CAST», ожидаемый «AS».

Msg156, Уровень 15, Состояние 1, Строка 13
Неверный синтаксис рядом с ключевым словом «ELSE».

1 Ответ

0 голосов
/ 07 июня 2018

Если вы хотите преобразовать строку в дату, используйте Преобразование или преобразование

select CAST(@dateTarget as date) 
select CONVERT(date, @dateTarget)

SQL Server может неявно преобразовать вашу строку в дату (хотя я рекомендую явное преобразование)

declare @dateTarget  char(8) = '20130613'
declare @dateTarget2  char(8) = '20180608'
declare @dateNow as date = GETDATE()

IF @dateTarget >= @dateNow
BEGIN
    print 'Target cannot be greater than DateNow.'
END
ELSE IF @dateTarget2 >= @dateNow
BEGIN
    print 'Target2 cannot be greater than DateNow.'
END
ELSE
BEGIN
    print 'ok'
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...