SQL中的Concate主键

时间:2016-07-12 12:17:45

标签: sql tsql concatenation

我想直接联系Primary Keys中多个表的SQL。我使用下面的查询来连接三个主键和它们之间的连字符,但SQL跳过连字符并总结主键并产生单个值。

  SELECT CID + '-' + RID + '-'+  CGID As [IdCombination] ...    

其中CID,RID和CGID是三个Primary Keys表的SQL

它如何跳过查询中的string部分?

任何帮助都将受到高度赞赏。

更新

例如:CID,RID和CGID的值分别为3,4,3。它应该是3-4-3但结果是10。

3 个答案:

答案 0 :(得分:1)

发生了什么事?请记住,+表示添加和字符串连接。碰巧-可以解释为一个数字(如-0),因此SQL Server更喜欢将+解释为添加。

通常,当您执行此类操作时,分隔字符不能被解释为数字,而您只会收到错误。我很开心你在这种情况下不会收到错误。

一种方法是将值显式地转换为字符串:

SELECT CAST(CID as VARCHAR(255)) + '-' + CAST(RID +  as VARCHAR(255)) '-'+  CAST(CGID  as VARCHAR(255)) As [IdCombination] 

在SQL Server 2012+中,您可以使用CONCAT()更简单地执行此操作:

SELECT CONCAT(CID, '-', RID, '-', 'CGID) As [IdCombination] 

CONCAT()知道一切都应该是一个字符串。

答案 1 :(得分:1)

试试这个

SELECT 5 + '-' +  8

输出是13.我必须承认,我没想到这个......

现在试试这个

SELECT CAST('-' AS INT)

结果为0.当您的选择以INT开头时,SQL Server会尝试对int值进行求值。由于单个连字符是隐式的casteable,这将返回值的摘要...

其他人指出的解决方案是将列值转换为字符串类型或使用CONCAT

答案 2 :(得分:0)

我需要查看输出,但我假设,某些ID存储为int并且正在计算,所以你应该使用

SELECT Cast(CID as Varchar(50)) + '-' + Cast(RID as Varchar(50)) + '-'+  Cast(CGID as Varchar(50)) As [IdCombination]