我想将多个表的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.
发布于 2016-07-12 12:22:35
这是怎么回事?请记住,+意味着加法和字符串连接。碰巧,-可以被解释为一个数字(如-0),因此Server更倾向于将+解释为加法。
通常,当您执行这种类型的操作时,分离字符不能被解释为一个数字,您只会得到一个错误。我很高兴你在这件事上没有出错。
一种方法是显式地将值转换为字符串:
SELECT CAST(CID as VARCHAR(255)) + '-' + CAST(RID + as VARCHAR(255)) '-'+ CAST(CGID as VARCHAR(255)) As [IdCombination] 在Server 2012+中,可以使用CONCAT()进行更简单的操作
SELECT CONCAT(CID, '-', RID, '-', 'CGID) As [IdCombination] CONCAT()知道一切都应该是字符串。
发布于 2016-07-12 12:34:19
尝尝这个
SELECT 5 + '-' + 8输出是13。我必须承认,我没想到.
现在试试这个
SELECT CAST('-' AS INT)结果是0。当选择以INT开头时,Server将尝试对int值进行求和。由于单个连字符可以隐式插入,这将返回值的总和.
正如其他人所指出的,解决方案要么是将列值转换为字符串类型,要么是使用CONCAT。
发布于 2016-07-12 12:22:54
我需要看到输出,但我假设某些ID被存储为int,并且它正在被计数,所以您应该使用
SELECT Cast(CID as Varchar(50)) + '-' + Cast(RID as Varchar(50)) + '-'+ Cast(CGID as Varchar(50)) As [IdCombination]https://stackoverflow.com/questions/38328695
复制相似问题