SELECT logcount, logUserID, maxlogtm
, DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
FROM statslogsummary
WHERE daysdiff > 120
я получил
msgstr "неверное имя столбца daysdiff".
Maxlogtm - это поле даты и времени. Это мелочи, которые сводят меня с ума.
sql
sql-server
tsql
sql-server-2005
user990016
источник
источник
`daysdiff`
.Ответы:
Обычно вы не можете ссылаться на псевдонимы полей в
WHERE
предложении. (Думайте об этом как о всех,SELECT
включая псевдонимы, применяется послеWHERE
пункта.)Но, как уже упоминалось в других ответах, вы можете заставить SQL обрабатываться
SELECT
до обработкиWHERE
. Обычно это делается с помощью скобок для принудительного логического порядка операций или с помощью общего табличного выражения (CTE):Скобки / подвыборки:
Или посмотрите ответ Адама для версии CTE того же самого.
источник
HAVING
Ответ не работает в большинстве сред SQL, включая MS-SQL, о котором идет речь в этом вопросе. (В T-SQLHAVING
требуется агрегатная функция.)Если вы хотите использовать псевдоним в своем
WHERE
предложении, вам нужно обернуть его в суб-выборку или CTE :источник
Самый эффективный способ сделать это без повторения кода - использовать HAVING вместо WHERE.
источник
HAVING
псевдонимов не является стандартным (хотя работает на MySQL). В частности, я думаю, что это не работает с SQL Server.[S0001][207] Invalid column name 'daysdiff'
[S0001][8121] Column 'day' is invalid in the HAVING clause because it is not contained in either an aggregate function or the GROUP BY clause.
Если вы не хотите перечислять все свои столбцы в CTE, другой способ сделать это - использовать
outer apply
:источник
Как насчет использования подзапроса (это работало для меня в Mysql)?
источник
HAVING работает в MySQL в соответствии с документацией:
источник
Вы можете ссылаться на псевдоним столбца, но вам нужно определить его, используя
CROSS/OUTER APPLY
:DBFiddle Demo
Плюсы:
WHERE/GROUP BY/ORDER BY
источник
sql-server
иt-sql
:)Приехал сюда в поисках что - то подобное, но с случаем , когда, и закончился , используя , где , как это:
WHERE (CASE WHEN COLUMN1=COLUMN2 THEN '1' ELSE '0' END) = 0
может быть , вы могли бы использоватьDATEDIFF
вWHERE
непосредственно. Что-то вроде:источник