2016-02-29 5 views
1

Я новичок в SQL и Postgres, так что, надеюсь, это не так сложно понять для всех вас.Использование функции положения в функции случая - PostgreSQL

Я пытаюсь использовать функцию Позиции в сазе, но я получаю ошибку "ERROR: Syntax error at or near ""Project"". LINE 2: CASE WHEN position('(' IN "Project") >0 THEN".

Я использовал эту функцию положения до и она работала хорошо, так что я запутался, что проблема здесь. Я также пробовал имя таблицы, например "xyztable.Project" и "Project" - оба без кавычек.

Вот весь оператор:

SELECT "Project", 
CASE WHEN postion('(' IN "Project") >0 THEN 
    substring("Project",position('(' IN "Project")+1,position(')' IN "Project")-2) 
CASE WHEN postion('('IN "Project") IS NULL THEN 
    "Project" 
END 
FROM "2015Budget"; 

Как я не получил в прошлом второй строке этого заявления, если кто-нибудь увидит ничего, что бы предотвратить это заявление от запуска правильно, пожалуйста, указать это из.

Новое заявление:

SELECT "Project", 
CASE 
    WHEN position('(' IN "Project") >0 THEN 
    substring("Project",position('(' IN "Project")+1,position(')' IN "Project")-2) 
    WHEN position('('IN "Project") IS NULL THEN 
    "Project" 
END 
FROM "2015Budget"; 

Спасибо за вашу помощь !!

ответ

1

Ошибка произошла из-за простой опечатки - postion вместо position.

Как правило, вы получите гораздо более понятное сообщение об ошибке в таких ситуациях (например, «функция postion(text,text) не существует»). Однако использование функциональных ключевых слов в качестве разделителей аргументов (в соответствии с требованиями стандарта SQL) делает этот случай намного сложнее для парсера.

После этого вы столкнетесь с другой ошибкой. Обратите внимание, что общий вид выражения с несколькими ветвями CASE:

CASE 
    WHEN <condition1> THEN <value1> 
    WHEN <condition2> THEN <value2> 
    ... 
END 
+0

А, я вижу. Думаю, я работал над этим слишком поздно ночью :). – christopheralan88

+0

Я добавил новое утверждение к исходному вопросу. Однако строки не возвращаются, и я получаю два столбца: Project и Case. Вместо этого я хочу, чтобы возвращаемый столбец назывался Project Number, который возвращает подстроку в столбце Project, если поле Project содержит «(», в противном случае я хочу, чтобы он просто возвращал поле Project. Знаете ли вы, как это сделать? – christopheralan88

+1

Он возвращается второй столбец, потому что у вас есть «Проект», указанный в первой строке вашего запроса. Вы можете назвать другой столбец, поставив «AS» Project Number «' в конце оператора 'CASE'. Если этот запрос возвращается –

Смежные вопросы