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;