Mysql 如何在WHERE子句中使用别名列day?
我对这个问题有一个疑问:Mysql 如何在WHERE子句中使用别名列day?,mysql,sql,Mysql,Sql,我对这个问题有一个疑问: SELECT DAYOFYEAR(t.ts_start) AS 'day', YEAR(t.ts_start) AS year, t.o AS value FROM Cryptoforecast_ETH_BTC_1h AS t 当我运行它时,它会显示结果。现在我想过滤一天中添加的WHERE语句,如下所示 SELECT DAYOFYEAR(t.ts_start) AS 'day', YEAR(t.ts_start) AS year, t.o AS value FR
SELECT DAYOFYEAR(t.ts_start) AS 'day', YEAR(t.ts_start) AS year, t.o AS value FROM Cryptoforecast_ETH_BTC_1h AS t
当我运行它时,它会显示结果。现在我想过滤一天中添加的WHERE
语句,如下所示
SELECT DAYOFYEAR(t.ts_start) AS 'day', YEAR(t.ts_start) AS year, t.o AS value FROM Cryptoforecast_ETH_BTC_1h AS t WHERE 'day'=157
但这并没有带来任何结果和警告:
Truncated incorrect DOUBLE value: 'day'
问题是什么?您不能在
WHERE
子句中使用别名列。所以,实际上并不是比较列,而是比较字符串值和int
WHERE 'day'=157
相反,你可以使用
WHERE DAYOFYEAR(t.ts_start) = 157
旁注:您不需要对列别名使用单引号。只需重复调用
WHERE
子句中的DAYOFYEAR
:
SELECT
DAYOFYEAR(t.ts_start) AS day,
YEAR(t.ts_start) AS year,
o AS value
FROM Cryptoforecast_ETH_BTC_1h
WHERE DAYOFYEAR(t.ts_start) = 157;
SELECT
DAYOFYEAR(t.ts_start) AS day,
YEAR(t.ts_start) AS year,
o AS value
FROM Cryptoforecast_ETH_BTC_1h
HAVING day = 157;
或者,如果您想使用day
别名,可以使用重载的HAVING
子句:
SELECT
DAYOFYEAR(t.ts_start) AS day,
YEAR(t.ts_start) AS year,
o AS value
FROM Cryptoforecast_ETH_BTC_1h
WHERE DAYOFYEAR(t.ts_start) = 157;
SELECT
DAYOFYEAR(t.ts_start) AS day,
YEAR(t.ts_start) AS year,
o AS value
FROM Cryptoforecast_ETH_BTC_1h
HAVING day = 157;
尝试此操作,
选择DAYOFYEAR(t.ts_start)作为day,选择YEAR(t.ts_start)作为YEAR,选择t.o作为Cryptoforecast的值,选择t.o作为t HAVING day=157