2015-07-07 4 views
0

Существует H2 таблица: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 

Сообщение об ошибке Выберите год (CONVERT (ondate, ТШЕЗТАМР)) КАК год ОТ sometable ГДЕ год = 2015; Колонка «YR» не найдена; SQL: SELECT YEAR (CONVERT (ondate, TIMESTAMP)) AS yr FROM sometable WHERE yr = 2015 [42122-176] 42S22/42122

+0

Вы хотите получить год с даты? –

+0

Да, и он извлекается. 'SELECT YEAR (CONVERT (ondate, TIMESTAMP)) AS yr FROM sometable' works. Но ... когда я добавляю ГДЕ, это не так: / – Willmore

ответ

1

Это не H2 конкретно, это будет происходить на многих РСУБД. Столбец yr не является частью предложения SELECT, это оператор CONVERT. Если вы хотите сделать это, оберните весь оператор в производную таблицу и запросите это или используйте то же предложение, что и в 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 
1

Вы не можете ссылаться на псевдоним столбца в предложении where.

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

Ошибка заявляет, что столбец yr не найден, потому что yr не ваше имя столбца, это просто псевдоним. SQL не может рассматривать псевдоним в качестве имени столбца можно написать так

SELECT 
    YEAR(CONVERT(ondate, TIMESTAMP)) AS yr 
FROM sometable WHERE 
    YEAR(CONVERT(ondate, TIMESTAMP)) = 2015 
Смежные вопросы