PostgreSQL Concat 2号码给了我错误

时间:2014-04-22 22:05:53

标签: sql postgresql object-to-string

我正在尝试从两个不同的列中连接2个数字,这些是chain_code和shop_code。

enter image description here

我试过了:

SELECT CONCAT(`shop_code`, `shop_code`) AS myid FROM {table}

但是我收到了一个错误:

ERROR:  operator does not exist: ` integer
LINE 1: SELECT CONCAT(`shop_code`, `shop_code`) AS myid FROM...
                  ^
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.

我甚至尝试将其转换为字符串但不能... CONCAT(to_char(chain_code, '999')...) ...但是它说没有这样一个名为'to_sting'的函数(在PostgreSQL Documentation上找到)

1 个答案:

答案 0 :(得分:3)

首先:不要使用那些可怕的反引号`,这是无效的(标准)SQL。

引用标识符时请使用双引号:"shop_code" `shop_code`

但由于这些标识符不需要任何引用,只需将它们完全删除即可。通常,您应该避免使用带引号的标识符。他们造成的麻烦远远超过他们的价值。

有关指定SQL标识符的详细信息,请参阅手册:http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS

concat()仅适用于text / varchar值,因此首先需要将整数值转换/转换为varchar:

SELECT CONCAT(chain_code::text, shop_code::text) AS myid FROM...

  

但它说没有这样一个名为' to_sting'

的功能

好吧,功能是to_char(),而不是to_sting()

使用to_char()是强制转换操作符::text的替代方法,但在这种情况下稍微复杂一点:

SELECT CONCAT(to_char(chain_code,'999999'), to_char(shop_code, '999999')) AS myid FROM...

此上下文中to_string()的问题是,您需要指定一个格式掩码,该掩码可以处理该列中的所有可能值。使用强制转换操作符更容易,也更好。


更新(感谢mu)

正如mu指出的那样,concat实际上并不需要任何演员或转换:

SELECT CONCAT(chain_code, shop_code) AS myid FROM...

工作得很好。


这是一个显示所有可能解决方案的SQLFiddle:http://sqlfiddle.com/#!15/2ab82/3