Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql-从unix时间戳中选择年份_Mysql_Select_Timestamp - Fatal编程技术网

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
变量替换为创建该列的实际函数(aka
FROM_UNIXTIME(my_unix_timestamp_column,'%Y')
),这样就可以了


这是因为查询的
SELECT
部分直到
WHERE
部分完成了要返回的行的匹配后才会执行。

您不能在
WHERE
子句中使用由
SELECT
部分创建的列

将where子句中的
year
变量替换为创建该列的实际函数(aka
FROM_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的任何表格上。