Mysql-从unix时间戳中选择年份
我用的是:Mysql-从unix时间戳中选择年份,mysql,select,timestamp,Mysql,Select,Timestamp,我用的是: SELECT FROM_UNIXTIME(my_unix_timestamp_column, '%Y') AS year FROM table_name WHERE year = 2009; 但这给了我一个错误: Unknown column 'year' in 'where clause'SELECT FROM_UNIXTIME(my_unix_timestamp_column, '%Y') AS year FROM table_name WHERE year = 2009 “
SELECT FROM_UNIXTIME(my_unix_timestamp_column, '%Y') AS year FROM table_name WHERE year = 2009;
但这给了我一个错误:
Unknown column 'year' in 'where clause'SELECT FROM_UNIXTIME(my_unix_timestamp_column, '%Y') AS year FROM table_name WHERE year = 2009
“我的unix时间戳列”和“表名”都是正确的,我不知道为什么它会给我这个
我使用的是PHP5.3.0您不能使用在
WHERE
子句中的SELECT
部分创建的列
将where子句中的year
变量替换为创建该列的实际函数(akaFROM_UNIXTIME(my_unix_timestamp_column,'%Y')
),这样就可以了
这是因为查询的
SELECT
部分直到WHERE
部分完成了要返回的行的匹配后才会执行。您不能在WHERE
子句中使用由SELECT
部分创建的列
将where子句中的year
变量替换为创建该列的实际函数(akaFROM_UNIXTIME(my_unix_timestamp_column,'%Y')
),这样就可以了
这是因为查询的
SELECT
部分在WHERE
部分完成要返回的行的匹配后才会执行。WHERE部分在字段列表中的别名之前执行。最好是在WHERE子句中使用索引。在字段列表中的别名之前执行WHERE部分。最好是在WHERE子句中使用索引
SELECT FROM_UNIXTIME(my_unix_timestamp_column, '%Y') AS `year`
FROM table_name
HAVING `year` = 2009
与WHERE
子句不同,HAVING
子句可以引用SELECT
子句别名
更有效的方法是:
SELECT FROM_UNIXTIME(my_unix_timestamp_column, '%Y') AS `year`
FROM table_name
WHERE my_unix_timestamp_column >= UNIX_TIMESTAMP('2009-01-01')
AND my_unix_timestamp_column < UNIX_TIMESTAMP('2010-01-01')
从UNIXTIME(我的unix时间戳列,'%Y')中选择'year'`
从表\u名称
其中my_unix_timestamp_column>=unix_timestamp('2009-01-01')
和my_unix_timestamp_列
与WHERE
子句不同,HAVING
子句可以引用SELECT
子句别名
更有效的方法是:
SELECT FROM_UNIXTIME(my_unix_timestamp_column, '%Y') AS `year`
FROM table_name
WHERE my_unix_timestamp_column >= UNIX_TIMESTAMP('2009-01-01')
AND my_unix_timestamp_column < UNIX_TIMESTAMP('2010-01-01')
从UNIXTIME(我的unix时间戳列,'%Y')中选择'year'`
从表\u名称
其中my_unix_timestamp_column>=unix_timestamp('2009-01-01')
和my_unix_timestamp_列
我不太确定这是因为YEAR
在MySQL中是一个保留字,还是因为它希望您按照以下思路做一些事情:
SELECT
FROM_UNIXTIME(my_unix_timestamp_column, '%Y') AS year
FROM
table_name
WHERE
FROM_UNIXTIME(my_unix_timestamp_column, '%Y') = 2009;
我记不清上一期是否只与
组相关:S我不太清楚这是因为年
是MySQL中的保留字,还是因为它想让您按照以下思路做一些事情:
SELECT
FROM_UNIXTIME(my_unix_timestamp_column, '%Y') AS year
FROM
table_name
WHERE
FROM_UNIXTIME(my_unix_timestamp_column, '%Y') = 2009;
记不清最后一个问题是否只与组相关
ings:S另一个备选方案,避免重复较大的函数调用:
SELECT year
FROM (SELECT FROM_UNIXTIME(my_unix_timestamp_column, '%Y') AS year
FROM table_name) AS list_of_years
WHERE year = 2009;
您可能仍然需要在单词“year”周围使用反引号,以避免与year作为关键字发生冲突。优化器不需要创建中间表来回答此查询。另一种选择,避免重复较大的函数调用:
SELECT year
FROM (SELECT FROM_UNIXTIME(my_unix_timestamp_column, '%Y') AS year
FROM table_name) AS list_of_years
WHERE year = 2009;
您可能仍然需要在单词“year”周围使用反引号,以避免与year作为关键字发生冲突。优化器不需要创建中间表来回答此查询。虽然这两个查询都可以工作,但此回答没有说明为什么两者都可以解决where子句中的年份问题。(与where子句中的年匹配相比,这两种查询的结构都稍不正常)虽然这两种查询都有效,但这个答案并没有说明为什么两者都能解决where子句中的year
问题。(与where子句中的年份匹配相比,两者的结构都稍不正常)关于SELECT
部分完全错误。我不会投你反对票,但试着运行以下查询:SET@r:=1;从mytable中选择@r:=id+1,其中@r=id
位于任何具有从1
开始的连续id的表上。关于SELECT
部分完全错误。我不会投你反对票,但试着运行以下查询:SET@r:=1;从mytable中选择@r:=id+1,其中@r=id
位于从1
开始具有连续id的任何表格上。