在 PostgreSQL 中使用 SQL 保留关键字作为列名称过滤列
Filtering columns with SQL reserved keywords as column name in PostgreSQL
我的同事上传了一组数据,我必须按日期筛选数据。不幸的是,我的同事使用了年和月的保留字来上传数据,所以数据库中的数据是这样的:
babyname year month gender
----------- ---- ----- ------
Sarah 2018 2 f
Jack 2016 5 m
James 2017 7 m
Susan 2017 1 f
我要过滤 2017 年 4 月或之后出生的女婴名字。我写了以下查询,但它根本不按日期过滤数据:
SELECT * FROM babytable
WHERE
gender='f'
AND
(("year"=2017 AND "month">3) OR "year"=2018);
你能告诉我我的错误是什么吗?
非常感谢
无需将列名转换为字符串,您的 WHERE gender = 'f'
条件具有正确的格式。尝试:
SELECT * FROM babytable
WHERE
gender='f'
AND
((year=2017 AND month>3) OR year=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'
我的同事上传了一组数据,我必须按日期筛选数据。不幸的是,我的同事使用了年和月的保留字来上传数据,所以数据库中的数据是这样的:
babyname year month gender
----------- ---- ----- ------
Sarah 2018 2 f
Jack 2016 5 m
James 2017 7 m
Susan 2017 1 f
我要过滤 2017 年 4 月或之后出生的女婴名字。我写了以下查询,但它根本不按日期过滤数据:
SELECT * FROM babytable
WHERE
gender='f'
AND
(("year"=2017 AND "month">3) OR "year"=2018);
你能告诉我我的错误是什么吗? 非常感谢
无需将列名转换为字符串,您的 WHERE gender = 'f'
条件具有正确的格式。尝试:
SELECT * FROM babytable
WHERE
gender='f'
AND
((year=2017 AND month>3) OR year=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'