如何解决PostgreSQL LIKE查询
我想按日期开始销售,日期以“ 2007-02”开始:
SELECT *
FROM payment
WHERE payment_date LIKE '2007%';
但是有错误:
ERROR: ERROR: operator does not exist: timestamp without time zone ~~ unknown
LINE 9: WHERE payment_date LIKE '2007%'
^
HINT: Operator with given name and argument types could not be found. Perhaps you should add explicit casts.
但另一个查询为
SELECT email
FROM customer
WHERE first_name = 'Kelly'
AND last_name LIKE 'K%';
工作正常。如何强制该查询工作? 您可以通过以下链接获取我的学习数据库:https://dropmefiles.com/LX8cu
解决方法
我想获取日期为'2007-02'的日期的销售信息:
LIKE
是 string 函数。如错误消息所示,payment_date
列的数据类型为timestamp
,因此请使用日期过滤:
where payment_date >= date '2007-02-01' and payment_date < date '2017-03-01'
或者,如果您想要全年:
where payment_date >= date '2007-01-01' and payment_date < date '2018-01-01'
您可能会想使用日期函数来提取日期的年份部分并将其用于比较:
where extract(year from payment_date) = 2007
我不建议这样做;这效率要低得多,因为与直接对字面量进行过滤相比,该功能需要在过滤发生之前应用于整个列。有人说这种表达方式是不可持续的。
,该错误消息确实说明了一切-like
运算符在有时间戳记的情况下在其两侧都带有字符串。
另一种方法可能是extract
年:
SELECT *
FROM payment
WHERE EXTRACT(YEAR FROM payment_date) = 2007;
,
我假设您的付款日期是日期,时间或时间戳记。
在使用like运算符之前,尝试将日期/时间转换为字符串。
https://www.postgresql.org/docs/13/functions-formatting.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。