Hacer referencia a un alias de columna en una cláusula WHERE
SELECT logcount, logUserID, maxlogtm
, DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
FROM statslogsummary
WHERE daysdiff > 120
yo obtengo
"nombre de columna no válido díasdiff".
Maxlogtm es un campo de fecha y hora. Son las pequeñas cosas las que me vuelven loco.
Aceptado
SELECT
logcount, logUserID, maxlogtm,
DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
FROM statslogsummary
WHERE ( DATEDIFF(day, maxlogtm, GETDATE() > 120)
Normalmente no puede hacer referencia a los alias de campo en la WHERE
cláusula. (Piense en ello como si todos los SELECT
alias, incluidos, se aplicaran después de la WHERE
cláusula).
Pero, como se menciona en otras respuestas, puede obligar a SQL a tratar SELECT
para que se maneje antes de la WHERE
cláusula. Esto generalmente se hace entre paréntesis para forzar el orden lógico de operación o con una expresión de tabla común (CTE):
Paréntesis/Subselección:
SELECT
*
FROM
(
SELECT
logcount, logUserID, maxlogtm,
DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
FROM statslogsummary
) as innerTable
WHERE daysdiff > 120
O vea la respuesta de Adam para obtener una versión CTE del mismo.
Si desea utilizar el alias en su WHERE
cláusula, debe incluirlo en una subselección o CTE :
WITH LogDateDiff AS
(
SELECT logcount, logUserID, maxlogtm
, DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
FROM statslogsummary
)
SELECT logCount, logUserId, maxlogtm, daysdiff
FROM LogDateDiff
WHERE daysdiff > 120