2016-06-06 4 views
0

В PSQL, пытаясь ссылаться на псевдоним в WHERE пункте:Ссылка псевдоним в ИНЕКЕ

SELECT 
    SUBSTRING(pk, 6, 2)::INT AS _year 
FROM 
    listing 
WHERE 
    _year > 90 

это вызывает ошибку:

ERROR: column "_year" does not exist 
LINE 1: ...STRING (pk, 6, 2)::INT AS _year FROM listing WHERE _year > 90... 
                  ^
********** Error ********** 

ERROR: column "_year" does not exist 

Можно ли ссылаться на псевдоним в WHERE пункте?

+0

Реальный вопрос: почему вы хранения в год, спрятанный в колонке VARCHAR? –

+0

Он хранится другими (и фактически является его идентификационным номером как pk) – vedar

+1

Уделение нескольких частей информации в один столбец еще хуже. PK не должен содержать такие вещи –

ответ

2

Это невозможно, как в sql, порядок выполнения - это первое, предложение where и затем выбор. В то время, когда предложение выполняется, оно не знает, что вы определили как псевдоним, и вы получите эту ошибку.

Вам нужно переписать запрос, как это ..

SELECT 
    SUBSTRING(pk, 6, 2)::INT AS _year 
FROM 
    listing 
WHERE 
SUBSTRING(pk, 6, 2)::INT > 90 
+0

А, это в sql-основах ... Спасибо. – vedar

1

Попробуйте этот путь

select * from (SELECT 
    SUBSTRING(pk, 6, 2)::INT AS _year 
FROM 
    listing) a where _year>90