Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I reference an alias in a WHERE clause?

Here's my statement:

SELECT 
  C.Account, 
  (RTRIM(N.FIRST) + ' ' + RTRIM(LTRIM(N.MIDDLE)) + ' ' + RTRIM(LTRIM(N.LAST)) + ' ' + LTRIM(N.SUFFIX)) AS OwnerName,
  DateAdd(dd, -1, C.ExpirationDate) as RealExpirationDate, 
  C.Description, 
  C.Type
FROM CARD as C
  INNER JOIN NAME as N ON C.Account = N.Account
WHERE (RealExpirationDate BETWEEN @StartDate AND @EndDate)
  AND C.Type IN(10,15,17,25)

I keep getting an error saying that RealExpirationDate is an invalid column name. How can I reference that alias?

like image 891
Chris Avatar asked Jan 18 '23 15:01

Chris


2 Answers

You can't in your code above, remember WHERE happens before SELECT, so you'd have to use:

WHERE DateAdd(dd, -1, C.ExpirationDate) BETWEEN @StartDate AND @EndDate

The most common way to alias something like this would be some inner view / query like so:

SELECT
  n.FooBar,  --here we can use FooBar
  t.BarFoo
FROM
  MyTable t
INNER JOIN
(
 SELECT
   myTestCase as FooBar
 From MyTable2
) n
like image 130
JonH Avatar answered Jan 20 '23 04:01

JonH


You actually shouldn't try to reuse the alias in this case. It isn't sargable (Can't do a range seek on ExpirationDate).

Just use

WHERE C.ExpirationDate 
  BETWEEN DateAdd(dd, 1, @StartDate)  AND DateAdd(dd, 1, @EndDate)
like image 20
Martin Smith Avatar answered Jan 20 '23 03:01

Martin Smith