我想直接联系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。
答案 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]