PostgreSQL用逻辑运算符切片数据 修正多余查询输出列问题
解决方案
你查询结果多出invoice_date列,是因为SELECT子句里额外加了CAST(invoice_date AS date)这行——SELECT后写的所有字段、表达式都会被作为结果列返回,直接删掉这行就能去掉多余列。
另外你的代码还存在两个不符合练习要求的问题:
- 规则要求用
CAST完成日期类型转换,你把转换逻辑写在了返回列里,没有用到日期筛选的比较逻辑中,且直接用点分隔的非标准日期字符串做比较,容易出现解析错误 - 你额外加了排除美国、巴西,以及订单金额大于2的过滤条件,和本次练习指定的“仅筛选2009年9月日期区间”的要求不符,需要移除
符合所有规则的最终SQL
SELECT billing_address, billing_city FROM invoice WHERE CAST(invoice_date AS DATE) >= '2009-09-01' AND CAST(invoice_date AS DATE) <= '2009-09-30';
逻辑说明
- 返回列仅保留要求的
billing_address、billing_city两个字段,无多余输出 - 日期筛选时显式用
CAST把invoice_date转为DATE类型再做比较,满足类型转换要求 - 区间判断用
>=、<=比较运算符搭配AND逻辑运算符实现,全程未使用BETWEEN关键字,符合规则 - 比较用的日期值采用标准
YYYY-MM-DD格式,不会因为数据库的日期格式配置差异出现匹配错误
内容的提问来源于stack exchange,提问作者Aleksey Ilchenko
相关产品推荐
相关产品推荐

