Postgresql 将星期日与星期日的字符串文字名称进行比较返回false
我将星期几的值与它们的字符串文字等价物进行比较,但始终得到Postgresql 将星期日与星期日的字符串文字名称进行比较返回false,postgresql,date,Postgresql,Date,我将星期几的值与它们的字符串文字等价物进行比较,但始终得到false。我在sqlfiddle中有一个相对简单的字符串DoW到‘monday’比较设置,但是,只有DoW到int比较有效。我计划继续使用它,但我试图理解失败的原因 我试图理解是什么导致PostgreSQL以这种方式运行。正如您在fiddle中看到的,没有一个相关的字符串文本具有“未知”类型。我承认,比较周数的正确方法是使用“值”比较,但这不能解释“喜欢”和“文本”比较的结果。差异源于提取和to_char处理日/DOW请求略有不同。见
false
。我在sqlfiddle中有一个相对简单的字符串DoW到‘monday’比较设置,但是,只有DoW到int比较有效。我计划继续使用它,但我试图理解失败的原因
我试图理解是什么导致PostgreSQL以这种方式运行。正如您在fiddle中看到的,没有一个相关的字符串文本具有“未知”类型。我承认,比较周数的正确方法是使用“值”比较,但这不能解释“喜欢”和“文本”比较的结果。差异源于提取和to_char处理日/DOW请求略有不同。见和。在这种情况下,请在第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;
to_char(…,'day')
返回填充字符串。请尝试to_char(..,'FMday')
或trim(to_char(..,'day'))
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;