[英]t-sql string concatenation
我有一个具有以下列的表
Type
--------
type 1
type 2
type 3
我如何将上述内容转换为字符串(“类型1”,“类型2”,“类型3”)
我想在带有IN子句的t-sql查询中使用输出。 类似于从TableA中选择*的内容,其中SomeColumn IN(“类型1”,“类型2”,类型3”)
我过去经常提出输出(类型1,类型2,类型3)
select '(' + STUFF((select ', ' + Type from TableA for xml path ('')),1,2,'') + ')'
但是不知道如何插入单引号。
通常的方法是使用子选择:
select * from TableA where SomeColumn IN (
select Type from TheOtherTable
)
我猜你也会在子选择上有一个where
子句。
根据复杂性,有时您可以使用外部联接来执行此操作:
select * from TableA a
left outer join TheOtherTable b on a.SomeColumn = b.Type
where b.Type is not null
使用哪种方法取决于对TableA
记录和我称为TheOtherTable
(带有Type
)应用的条件。
只是尝试好玩:)
declare @s1 varchar(8000)
declare @s2 varchar(8000)
update t
set
@s1 = ISNULL(@s1 + ',', '') + '''' + REPLACE(t.Type, '''', '''''') + ''''
,@s2 = 'select * from TableA where Type IN (' + @s1 + ')'
from TableA t
select @s2
REPLACE(t.Type, '''', '''''')
-如果字段的文本中有撇号,REPLACE会将其加倍。 尝试在表TableA 中将 type1更改为typ'e1或typ'e1
我开玩笑了...
尽量避免使用IN子句和子查询 。 它们工作非常慢(表扫描等)! 用这个:
select a.Type
from TableA a
inner join TheOtherTable b
on a.Type = b.Type
每当您需要报价时,请双击
所以'变成''
所以你的代码变成
select '(' + STUFF((select ''',''' + Type from TableA for xml path ('')),1,2,'') + ''')'
以上产生
('type 1','type 2','type 3')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.