Фильтрация столбцов с зарезервированными ключевыми словами SQL в качестве имени столбца в PostgreSQL - PullRequest
0 голосов
/ 17 сентября 2018

Мой коллега загрузил набор данных, и мне нужно отфильтровать данные по дате. К сожалению, мой коллега использовал зарезервированные слова года и месяца для загрузки данных, поэтому данные в базе данных выглядят так:

babyname     year  month  gender
-----------  ----  -----  ------
Sarah        2018  2      f
Jack         2016  5      m
James        2017  7      m
Susan        2017  1      f

Я собираюсь отфильтровать имена девочек, родившихся в апреле 2017 года или после этой даты. Я написал следующий запрос, но он вообще не фильтрует данные по дате:

SELECT * FROM babytable
WHERE
gender='f' 
AND
(("year"=2017 AND "month">3) OR "year"=2018);

Пожалуйста, дайте мне знать, в чем моя ошибка. Большое спасибо

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

демо: дБ <> скрипка

SELECT 
    * 
FROM 
    births 
WHERE
    gender = 'f' 
    AND ((year = 2017 AND month > 4) OR (year > 2017))

В качестве альтернативы вы можете преобразовать столбцы year и month в даты перед сравнением:

SELECT 
    * 
FROM 
    births 
WHERE
    gender = 'f' 
    AND to_date(year || '-' || month, 'YYYY-MM') > '2017-04-30'
0 голосов
/ 17 сентября 2018

Нет необходимости превращать имена столбцов в строки, ваше условие WHERE gender = 'f' имеет правильный формат. Попробуйте:

SELECT * FROM babytable
WHERE
gender='f' 
AND
((year=2017 AND month>3) OR year=2018);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...