在PostgreSQL中过滤使用SQL保留关键字作为列名的列

问题描述 投票:0回答:2

我的同事上传了一组数据,我必须按日期过滤数据。不幸的是,我的同事使用年和月的保留字来上传数据,因此数据库中的数据如下所示:

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);

你能让我知道我的错误是什么吗?非常感谢

sql postgresql reserved-words
2个回答
1
投票

无需将列名称设置为字符串,您的WHERE gender = 'f'条件具有正确的格式。尝试:

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

1
投票

demo: db<>fiddle

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

或者,您可以在比较之前将yearmonth列转换为日期:

SELECT 
    * 
FROM 
    births 
WHERE
    gender = 'f' 
    AND to_date(year || '-' || month, 'YYYY-MM') > '2017-04-30'
© www.soinside.com 2019 - 2024. All rights reserved.