【问题标题】:SELECT CONCAT alternative in PostgreSQLPostgreSQL 中的 SELECT CONCAT 替代方案
【发布时间】:2015-08-25 15:56:53
【问题描述】:

如何使用 PostgreSQL 语法编写以下 MySQL 查询:

SELECT CONCAT(REPEAT("   ", (COUNT(parent.name) - 1)), cat.name) AS name

提前致谢!

【问题讨论】:

  • 使用连接符号 ||

标签: mysql sql postgresql concat


【解决方案1】:

这里的错误是 PostgreSQL 不允许双引号 " 用于文字字符串(根据 SQL 标准)。您需要使用单引号 '

您还需要使用 ::int(特定于 Postgre)或 CAST(... AS int)(COUNT(parent.name) - 1) 转换为整数。
请注意,如果 (COUNT(parent.name) - 1) 优于 2147483647,这可能会引发 integer out of range 错误。

SELECT CONCAT(REPEAT('   ', (COUNT(parent.name) - 1)::int), cat.name) AS name

请注意,您也可以使用|| 进行字符串连接:

SELECT REPEAT('   ', (COUNT(parent.name) - 1)::int) || cat.name AS name

【讨论】:

  • 感谢您提供有用的答案,但我还有另一个问题:它给我一个错误:函数 repeat(unknown, bigint) 不存在。
  • 我正在使用 PostgreSQL。错误说:没有函数与给定的名称和参数类型匹配。您可能需要添加显式类型转换。我尝试将 CAST 添加到函数参数,但错误仍然存​​在。
  • @ГеоргиБанков :更新了我的答案,您需要转换为 int (您可以看到 here REPEAT 有 2 个参数:一个字符串和一个整数(不是 bigint))。跨度>
  • 啊,我尝试转换为数字,而不是 int,这导致了错误。对 PostgreSQL 来说还是很新的。谢谢和+1
  • 加 1 用于转换为 int
【解决方案2】:
SELECT REPEAT("   ", (COUNT(parent.name) - 1)) || cat.name AS name

SQLFIDDLE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 2015-09-06
    • 1970-01-01
    • 2019-01-21
    • 2011-01-05
    • 1970-01-01
    相关资源
    最近更新 更多