postgresql - 将星期几与星期几的字符串文字名称进行比较返回 false
问题描述
我正在将星期几的值与其字符串文字等价物进行比较,但我一直得到false
. 我在 SQL Fiddle 中有一个相对简单的字符串 DoW 到“星期一”比较设置,但是,只有 DoW 到 int 比较有效。我计划继续使用它,但我试图了解失败的原因。
http://sqlfiddle.com/#!17/2d52d/29
day1 like day2 AS like_compare, //Expect true, get false
day1 = day2 AS equal_compare, //Expect false, get false
day1::text like day2 AS text_compare, //Expect true, get false
EXTRACT(DOW FROM '2019-08-05') = 1 AS value_compare //Expect true, get true
我试图了解导致 PostgreSQL 以这种方式行事的原因。正如您在小提琴中看到的那样,相关的字符串文字都没有“未知”类型。我接受比较星期几的正确方法是使用“值”比较,但是,这并不能解释“喜欢”和“文本”比较发生了什么。
解决方案
差异源于 extract 和 to_char 处理 Day/DOW 请求的方式略有不同。请参阅EXTRACT DOW和TO_CHAR。在这种特殊情况下,请在第 1 天尝试修剪。
WITH mySelect AS
( SELECT
to_char(day1, 'day') AS day1,
day2
FROM
myTable
)
SELECT
*,
pg_typeof(day1)::text like pg_typeof(day2)::text AS types_match,
trim(day1) like day2 AS like_compare,
trim(day1) = day2 AS equal_compare,
trim(day1::text) like day2 AS text_compare,
EXTRACT(DOW FROM( SELECT day1 FROM myTable)) = 1 AS value_compare,
CAST('monday' AS text) like CAST('monday' AS text) AS sanity_compare
FROM
mySelect;
推荐阅读
- c# - 使用 UI 按钮在 Unity 3d 中放大和缩小功能
- python - Python 中的非最大值抑制给出了不好的结果:出了什么问题?
- javascript - 如何使用 mongoDB Node.js 驱动程序正确设置 Express 和 mongoDB?
- flutter - Flutter:从标签栏从一个标签切换到另一个标签,导致在两者之间构建标签
- c - C中多行字符串
- kubernetes - K8S 中的 HAProxy Ingress 无法启动
- delphi - 在键盘上的按键上执行按钮单击
- jenkins - 如何获取当前构建已从阶段重新启动的构建 ID?
- angular - 如何在没有 ngModule 的情况下使用 Angular 加载惰性组件?
- mysql - Powershell使用SimplySql脚本查询MySQL数据库