You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中如何将星期几数字转换为文本形式显示?

解决PostgreSQL星期数字转文本的问题

首先你的原查询存在语法错误,FROM "Action"后面多了冗余的date_part(...)语句,先修正这个问题。

PostgreSQL提供了多种方式将数字形式的星期转换为文本,最常用的是内置的to_char()函数,也可以用CASE语句手动映射。

方法1:使用to_char()函数

to_char()可以直接将时区转换后的日期格式化为星期文本,支持完整名称或缩写:

SELECT 
  count(*) AS c,
  -- 获取完整星期名称(如"Monday"或"星期一",取决于数据库语言设置)
  to_char("updatedAt" AT TIME ZONE 'Europe/Paris', 'Day') AS dow
FROM "Action"
GROUP BY to_char("updatedAt" AT TIME ZONE 'Europe/Paris', 'Day')

如果需要按星期顺序排序,可以结合date_part()获取数字排序:

SELECT 
  count(*) AS c,
  to_char("updatedAt" AT TIME ZONE 'Europe/Paris', 'Day') AS dow
FROM "Action"
GROUP BY 
  date_part('dow', "updatedAt" AT TIME ZONE 'Europe/Paris'),
  dow
ORDER BY date_part('dow', "updatedAt" AT TIME ZONE 'Europe/Paris')

格式符说明:

  • 'Day':输出完整星期名称(例如"Sunday"、"星期一")
  • 'Dy':输出缩写星期名称(例如"Sun"、"周一")

方法2:使用CASE语句手动映射

如果需要自定义星期文本(比如固定中文名称),可以用CASE语句直接匹配数字:

SELECT 
  count(*) AS c,
  CASE date_part('dow', "updatedAt" AT TIME ZONE 'Europe/Paris')
    WHEN 0 THEN '星期日'
    WHEN 1 THEN '星期一'
    WHEN 2 THEN '星期二'
    WHEN 3 THEN '星期三'
    WHEN 4 THEN '星期四'
    WHEN 5 THEN '星期五'
    WHEN 6 THEN '星期六'
  END AS dow
FROM "Action"
GROUP BY date_part('dow', "updatedAt" AT TIME ZONE 'Europe/Paris')
ORDER BY date_part('dow', "updatedAt" AT TIME ZONE 'Europe/Paris')

内容的提问来源于stack exchange,提问作者rap-2-h

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 10:10:34