吨-SQL字符串连接
我有了以下的柱吨-SQL字符串连接
Type
--------
type 1
type 2
type 3
如何可以转换上述为字符串等(“类型1”,“2型”,“类型3”)
一个表我想在IN子句中使用我的t-sql查询中的输出。像从表A中选择*,其中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
)。
我已经尝试过,它似乎并不正在工作。但同样的方法在处理整数数据类型时工作 – stackoverflowuser 2010-03-19 22:30:53
@stackoverflowuser:我用'varchar'列大量次使用了这个;这不是列类型的问题。你希望确保'null'不会作为子选择符的结果出现,是你的子选项'where'来确保?你提供的信息越多,真的越好。 – 2010-03-19 22:33:54
你是对的。我尝试了一个示例表,这似乎工作。但它不适用于我的桌子。所以这里是整个事情 - 我有一个用户定义函数,返回一个表(ID int,TypeName varchar(8000)) 我这样做select * from TableA其中Type in(从dbo.udf_MyFunction中选择TypeName(someinput) ) 但上述不起作用。 – stackoverflowuser 2010-03-19 22:49:02
无论您何时需要报价,double类型它
所以'变为 ''
使你的代码变得
select '(' + STUFF((select ''',''' + Type from TableA for xml path ('')),1,2,'') + ''')'
上面产生
('type 1','type 2','type 3')
??为什么-1? – CResults 2010-03-19 22:44:41
试试吧为了好玩:)
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会将其加倍。尝试改变TYPE1到typ'e1或typ''e1在表表A
我停在开玩笑......
尽量避免在子句和子查询。他们工作非常缓慢(表扫描等...)! 使用此:
select a.Type
from TableA a
inner join TheOtherTable b
on a.Type = b.Type
选择“”“空”“” – garik 2010-03-19 22:30:47
@CResults:*“请看我的回答如下” *那是什么意见的地步?他已经收到了你已经回答的通知,你的代表明确知道某人。所以...?! – 2010-03-19 22:46:48
@TJ评论删除:-) – CResults 2010-03-19 23:05:32