繁体   English   中英

H2选择表达式列别名

[英]H2 select expression column alias

有H2表:

CREATE TABLE IF NOT EXISTS sometable (ondate DATE NOT NULL);

有数据

INSERT INTO sometable VALUES ('2015-07-07');
INSERT INTO sometable VALUES ('2014-07-07');
INSERT INTO sometable VALUES ('2013-07-07');

我想限制所选的数据量,但以下选择不起作用 为什么?

SELECT YEAR(CONVERT(ondate, TIMESTAMP)) AS yr FROM sometable WHERE yr = 2015

错误消息是SELECT YEAR(CONVERT(ondate,TIMESTAMP))AS yr从某个固定年份yr = 2015; 未找到“ YR”列; SQL语句:SELECT YEAR(CONVERT(ondate,TIMESTAMP))AS yr从某个固定的年份yr = 2015 [42122-176] 42S22 / 42122

这不是特定于H2的,这将在许多RDBMS中发生。 yr列实际上不是SELECT子句的一部分,而是CONVERT语句。 如果要这样做,请将整个语句包装在派生表中并进行查询,或者使用与WHERE中SELECT相同的子句。

例如;

SELECT * FROM (SELECT YEAR(CONVERT(ondate, TIMESTAMP)) AS yr 
FROM sometable) a WHERE a.yr = 2015

要么

SELECT YEAR(CONVERT(ondate, TIMESTAMP)) AS yr FROM sometable 
WHERE YEAR(CONVERT(ondate, TIMESTAMP)) = 2015

您不能在where子句中引用列别名。

SELECT
YEAR(CONVERT(ondate, TIMESTAMP)) AS yr
FROM sometable
WHERE YEAR(CONVERT(ondate, TIMESTAMP)) = 2015

错误被指出柱yr没有发现,因为yr是不是你的列名,这只是一个别名。 SQL不能将别名视为可以使用这种方式编写的列名

SELECT 
    YEAR(CONVERT(ondate, TIMESTAMP)) AS yr 
FROM sometable WHERE 
    YEAR(CONVERT(ondate, TIMESTAMP)) = 2015

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM