【问题标题】:Understanding explicit type casts in postgresql了解 postgresql 中的显式类型转换
【发布时间】:2021-08-11 13:50:34
【问题描述】:
WHEN 'H' = 'E' THEN CAST(DATE_PART('Year', now()) AS CHAR(4))+ '0101'

我想获取当前年份并将月份和日期添加到今年。当我运行查询时,我遇到了以下错误。有没有人经历过这种情况?

SQL 错误 [42883]:错误:运算符不存在:字符 + 未知 提示:没有运算符匹配给定的名称和参数类型。您可能需要添加显式类型转换。

【问题讨论】:

  • 在 Postgresql 中 + 不是连接运算符。使用|| 或函数 CONCAT()。

标签: sql postgresql datepart


【解决方案1】:

这种方法对我来说似乎真的很神秘。两种选择:

WHEN 'H' = 'E' THEN TO_CHAR(NOW(), 'YYYY') || '0101'

WHEN 'H' = 'E' THEN TO_CHAR(DATE_TRUNC('YEAR', NOW()), 'YYYYMMDD')

【讨论】:

  • 当 'H' = 'E' THEN TO_CHAR(NOW(), 'YYYY') || '0101' 这个替代方案解决了我的问题。非常感谢!
【解决方案2】:

您试图在文本中添加数值,这是不允许的。要创建日期,请使用 make_date:

SELECT 
  make_date(date_part('year', now())::int,01,01),
  make_date(EXTRACT(YEAR FROM now())::int,01,01),
  EXTRACT(YEAR FROM now())||'0101'; -- in case you just need a string 

 make_date  | make_date  | ?column? 
------------+------------+----------
 2021-01-01 | 2021-01-01 | 20210101

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-07
    • 2010-09-15
    • 2016-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多