首页 > 解决方案 > 无法比较 to_char(timestamp, 'day') = 'monday'

问题描述

在 PostgreSQL 数据库中,我有一个表 payment ,其列 payment_date 类型为时间戳。我的目标是计算周一的付款。以下查询:

SELECT TO_CHAR(payment_date, 'day') FROM payment;

给出结果,例如:

thursday 
friday   
friday   
monday   
tuesday  

但是,当我尝试像这样计算星期一时:

SELECT COUNT(*) FROM payment
WHERE TO_CHAR(payment_date, 'day') = 'monday';

结果是 0,即使前一个查询显示它应该大于 0。第二个查询有什么问题?

标签: sqlpostgresql

解决方案


Postgres 文档说“完整的小写日期名称(空白填充到 9 个字符)”

这个选择可以解决问题吗?如果有尾随空格,则您的比较可能会失败。

SELECT COUNT(*) 
FROM payment 
WHERE RTRIM(TO_CHAR(payment_date, 'day')) = 'monday';

推荐阅读