无法比较 to_char(timestamp, 'day') = 'monday'

Posted

技术标签:

【中文标题】无法比较 to_char(timestamp, \'day\') = \'monday\'【英文标题】:Trouble comparing to_char(timestamp, 'day') = 'monday'无法比较 to_char(timestamp, 'day') = 'monday' 【发布时间】:2020-03-28 20:28:35 【问题描述】:

在 PostgreSQL 数据库中,我有一个表支付,其中包含时间戳类型的列 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。 第二个查询有什么问题?

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

@AleksandraStępniak:或者你可以使用to_char(payment_date, 'FMday') - FM 修饰符也会删除空白

以上是关于无法比较 to_char(timestamp, 'day') = 'monday'的主要内容,如果未能解决你的问题,请参考以下文章

如果超过 78 个字符,则使用 TIMESTAMP 的 TO_CHAR 会引发 ORA-01877

plsql 如何设置timestamp的显示格式

oracle to_char函数使用

PostgreSQL中有以下格式化函数:

在 WHERE 子句中按 TO_CHAR() 过滤[重复]

如何比较 sqlite TIMESTAMP 值