我正在尝试从两个不同的列中连接2个数字,这些是chain_code和shop_code。
我试过了:
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上找到)
答案 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