PostgreSQL 14.10查询当前月份数据无返回结果的问题及解决
PostgreSQL查询当前月份记录无结果的问题修复
问题原因
PostgreSQL中TO_CHAR(CURRENT_DATE, 'Month')返回的月份名称会自动填充空格到固定长度(比如最长的月份名称是September,共9个字符,所以November会被补成'November ',末尾带一个空格)。而你表中month字段存储的是无尾随空格的'November',即便用TRIM(month)处理了字段值,TO_CHAR的结果仍带空格,导致两者无法匹配。
修复方案
以下三种方法均可解决问题,推荐优先使用第一种:
方法一:用日期函数直接匹配月份和年份(最可靠)
避开字符串对比的潜在问题,直接提取当前日期的年份和月份,与表中字段对应匹配:SELECT * FROM partner_online_time WHERE year = EXTRACT(YEAR FROM CURRENT_DATE)::INT AND TO_CHAR(CURRENT_DATE, 'FMMonth') = month;也可以用月份数字直接匹配,避免字符串转换:
SELECT * FROM partner_online_time WHERE year = EXTRACT(YEAR FROM CURRENT_DATE)::INT AND EXTRACT(MONTH FROM CURRENT_DATE) = TO_DATE(month, 'Month')::INT;方法二:使用
TMMonth/FMMonth格式符TMMonth和FMMonth格式符会返回无填充空格的月份名称,可直接与表中字段匹配:SELECT * FROM partner_online_time WHERE month = TO_CHAR(CURRENT_DATE, 'TMMonth');方法三:同时修剪两边字符串
如果坚持原写法,需同时对TO_CHAR的结果也做trim处理:SELECT * FROM partner_online_time WHERE TRIM(month) = TRIM(TO_CHAR(CURRENT_DATE, 'Month'));
内容的提问来源于stack exchange,提问作者Sandeep Lakdawala
相关产品推荐
相关产品推荐

