首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL中的概念主键

SQL中的概念主键
EN

Stack Overflow用户
提问于 2016-07-12 12:17:45
回答 3查看 117关注 0票数 0

我想将多个表的Primary Keys直接连接到SQL中。我使用下面的查询将三个主键与它们之间的连字符连接起来,但是SQL跳过了连字符,并总结了主键并得到一个值。

代码语言:javascript
复制
  SELECT CID + '-' + RID + '-'+  CGID As [IdCombination] ...    

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

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

任何帮助都将不胜感激。

更新的

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-12 12:22:35

这是怎么回事?请记住,+意味着加法和字符串连接。碰巧,-可以被解释为一个数字(如-0),因此Server更倾向于将+解释为加法。

通常,当您执行这种类型的操作时,分离字符不能被解释为一个数字,您只会得到一个错误。我很高兴你在这件事上没有出错。

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

代码语言:javascript
复制
SELECT CAST(CID as VARCHAR(255)) + '-' + CAST(RID +  as VARCHAR(255)) '-'+  CAST(CGID  as VARCHAR(255)) As [IdCombination] 

在Server 2012+中,可以使用CONCAT()进行更简单的操作

代码语言:javascript
复制
SELECT CONCAT(CID, '-', RID, '-', 'CGID) As [IdCombination] 

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

票数 1
EN

Stack Overflow用户

发布于 2016-07-12 12:34:19

尝尝这个

代码语言:javascript
复制
SELECT 5 + '-' +  8

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

现在试试这个

代码语言:javascript
复制
SELECT CAST('-' AS INT)

结果是0。当选择以INT开头时,Server将尝试对int值进行求和。由于单个连字符可以隐式插入,这将返回值的总和.

正如其他人所指出的,解决方案要么是将列值转换为字符串类型,要么是使用CONCAT

票数 1
EN

Stack Overflow用户

发布于 2016-07-12 12:22:54

我需要看到输出,但我假设某些ID被存储为int,并且它正在被计数,所以您应该使用

代码语言:javascript
复制
SELECT Cast(CID as Varchar(50)) + '-' + Cast(RID as Varchar(50)) + '-'+  Cast(CGID as Varchar(50)) As [IdCombination]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38328695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档