Преобразование Varchar в Datetime на SQL Server - PullRequest
0 голосов
/ 03 декабря 2018
SELECT SubmitDate, Type, Location, CONVERT(DATETIME, SubmitDate, 101) AS DDate
FROM Employee
WHERE (Type IN ('C', 'Q')) 
  AND (DDate > DATEADD(DDate, - 1, GETDATE()))

Мне нужно получить все записи за прошлый год, SubmitDate - это varchar.Я использую CONVERT, чтобы преобразовать столбец в datetime.Однако я получаю следующую ошибку:

DDate Не опознаваемая опция dateadd.

Я попытался переключить CONVERT на следующее, и оно не сработало:

CONVERT(DATE, SubmitDate, 101)

1 Ответ

0 голосов
/ 04 декабря 2018

Как прокомментировали пользователи выше, вы не можете ссылаться на псевдонимы столбцов в предложениях WHERE в вашем запросе.Однако вы можете использовать преобразование столбца в предложении WHERE.Это не очень эффективно, но если вы используете запрос один или два раза (т. Е. Не в пакете служб SSIS или в автоматизированной задаче), все будет в порядке.

SELECT SubmitDate, Type, Location,CONVERT(datetime, SubmitDate, 101) AS DDate
FROM Employee
WHERE ([Type] IN ('C', 'Q')) 
AND (CONVERT(datetime, SubmitDate, 101) > DATEADD(Day, - 1, GETDATE()))

Вторая проблема с вашим запросомэто предложение DATEADD.DATEADD требует трех параметров: datepart, число и дата.У вас неверная часть даты, или «в какой части даты вы выполняете арифметику».DDate это не часть даты, это столбец.Частью даты являются такие значения, как Месяц, День, Год, Неделя и т. Д.
Я отредактировал запрос, чтобы установить для части даты значение «День», чтобы предложение оценивалось (используя псевдокод) GETDATE()-1 Day, но вы можете установить его на GETDATE()-1 Month или час.Но текущее выражение psedocode GETDATE()-1 DDate не имеет смысла для вашего клиента SQL Server

Дополнительные сведения о DATEADD см. В документации Microsoft

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...