SELECT logcount, logUserID, maxlogtm
, DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
FROM statslogsummary
WHERE daysdiff > 120
dostaję
„nieprawidłowa nazwa kolumny różnica dni”.
Maxlogtm to pole typu data i godzina. To małe rzeczy, które doprowadzają mnie do szaleństwa.
sql
sql-server
tsql
sql-server-2005
user990016
źródło
źródło
`daysdiff`
.Odpowiedzi:
Zwykle nie można odwoływać się do aliasów pól w
WHERE
klauzuli. (Potraktuj to jako całość, wSELECT
tym aliasy, stosuje się poWHERE
klauzuli.)Ale, jak wspomniano w innych odpowiedziach, możesz zmusić SQL do
SELECT
obsługi traktowania przedWHERE
klauzulą. Zwykle robi się to z nawiasami, aby wymusić logiczną kolejność operacji lub za pomocą wspólnego wyrażenia tabelowego (CTE):Nawias / Podselekcja:
Lub zobacz odpowiedź Adama na wersję CTE tego samego.
źródło
HAVING
Odpowiedź nie działa w większości środowisk SQL, w tym w MS-SQL, którego dotyczy to pytanie. (W T-SQLHAVING
wymaga funkcji agregującej.)Jeśli chcesz użyć aliasu w swojej
WHERE
klauzuli, musisz zawinąć go w sub select lub CTE :źródło
Najskuteczniejszym sposobem na zrobienie tego bez powtarzania kodu jest użycie HAVING zamiast WHERE
źródło
HAVING
aliasów nie jest standardem (działa jednak na MySQL). W szczególności myślę, że nie działa z 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.
Jeśli nie chcesz wyświetlać wszystkich swoich kolumn w CTE, możesz to zrobić w inny sposób
outer apply
:źródło
A co powiesz na użycie podzapytania (to zadziałało w MySQL)?
źródło
MAJĄC działa w MySQL zgodnie z dokumentacją:
źródło
Możesz odwołać się do aliasu kolumny, ale musisz go zdefiniować za pomocą
CROSS/OUTER APPLY
:DBFiddle Demo
Plusy:
WHERE/GROUP BY/ORDER BY
źródło
sql-server
it-sql
:)Przyjechałem tu szuka czegoś podobnego do tego, ale z przypadku, gdy, a zakończył przy użyciu gdzie tak:
WHERE (CASE WHEN COLUMN1=COLUMN2 THEN '1' ELSE '0' END) = 0
może można użyćDATEDIFF
wWHERE
bezpośrednio. Coś jak:źródło