Добавить время из таблицы в getdate () при использовании case - PullRequest
0 голосов
/ 07 января 2020

Я пытаюсь добавить время из столбца к дате и использовать в регистре дел

getdate() at time zone 'Central Standard Time'

это то, что я пробовал до сих пор

select case when 
getdate() at time zone 'Central Standard Time'  <= 
cast(cast (getdate() at time zone 'Central Standard Time'as date) as datetime) + endtime from tablename where id = 'uniqueid'
1 else 0 end

тип данных столбца endtime - nvarchar, формат времени - 21:00

, и это ошибка, которую я получаю

Incorrect syntax near the keyword 'from'

Я также пытался использовать это решение { ссылка }, но ошибка все та же. Но когда я делаю

select CAST(CAST(getdate() at time zone 'Central Standard Time' AS DATE) AS DATETIME) + endtime from tablename where id = 'uniqueid'

, я получаю правильный ответ 2020-01-07 07:00:00.000

, и это, кажется, тоже хорошо работает

select case when
getdate() at time zone 'Central Standard Time' >= 
CAST(CAST(CAST(getdate() at time zone 'Central Standard Time'AS DATE) AS DATETIME) + '' + '10:00'as DATETIME)
then 1 else 0
end

возвращает 1

, но

select case when 
getdate() at time zone 'Central Standard Time' <=
cast(CAST(CAST(getdate() at time zone 'Central Standard Time' AS DATE) AS DATETIME) + endtime from table where id = 'uniqueid' as datetime) 
then 1 else 0 end

возвращает Incorrect syntax near the keyword 'where'

Я не уверен, что я делаю что-то не так или это ограничение.

1 Ответ

2 голосов
/ 07 января 2020

Большая проблема заключается в том, что вы пытаетесь использовать подзапрос без использования подзапроса, в чем и заключается синтаксическая ошибка. Попробуйте это вместо этого (расширен для ясности)

SELECT 
    CASE 
        WHEN getdate() at TIME zone 'Central Standard Time' <= 
            (SELECT cast(cast(getdate() at TIME zone 'Central Standard Time' AS DATE) AS DATETIME) + endtime FROM tablename WHERE id = 'uniqueid') -- Subquery
            THEN 1 
        ELSE 0 
    END
...