sql语句将1,2,3字符串转换为int类型

条件:db.id in (charindex(','+ltrim(o.organizationid)+',', (select ','+user1.id from user1) ))
其中user1的存储的是varchar类型的字符串类似于1,2,3.
想通过判断db的id是否在user1的id中

问题不太明了。

IN 一个集合,这个集合可以是常量如 (1, 2, 3),也可以是个查询如 IN (SELECT id FROM user1)。
如果user1.id是字符串,可以使用CAST转换(数据库也会隐式得转换,不写也可以):
db.id IN (SELECT CAST(id AS int) FROM user1)

你还要IN 在organizationid的话,一个IN是不够的,用OR连起来
db.id IN (SELECT CAST(id AS int) FROM user1)

OR db.id IN (CAST(LTRIM(o.organizationid AS int)))追问

我的那个user1.id里面存的是字符串是这个样子的:
id
1,2
4,5,6
3,4,5
每个id都由几个数字拼接起来的,用你那个方法报错是这样的:
在将 varchar 值 '1,2,3' 转换成数据类型 int 时失败。

追答

我想你把一组数值常量和一个字符串搞错了,字符串的"1,2,3"只是*一个*字符串而已,IN (1, 2, 3)和IN ( '1,2,3' ) 是不一样的。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-08-10
创建一个函数,把字符串变成表格
CREATE FUNCTION fn_StringSplitTable
(
@str NVARCHAR(MAX),
@split NVARCHAR(10)
)
RETURNS TABLE
AS
RETURN
(
SELECT B.id
FROM
(
SELECT [value] = CONVERT(XML , '<v>' + REPLACE(@str , @split , '</v><v>') + '</v>')
) A
OUTER APPLY
(
SELECT id = N.v.value('.' , 'nvarchar(100)')
FROM A.[value].nodes('/v') N ( v )
) B
)
Go
查询可以为
select * from tb where id IN (SELECT CAST(id AS INT) FROM dbo.fn_StringSplitTable('1,2,3', ','))本回答被网友采纳
第2个回答  2014-07-12
用charindex函数判断就好了,你写的判断语句都已经判断了,你的需求不清楚啊追问

sql语句我给贴错了,应该是这样的:db.id in (charindex(','+ltrim(user1.organizationid)+',', (select ','+user1.id from user1) ))
报错是这样的
子查询返回的值不止一个。当子查询跟随在 =、!=、、>= 之后,或子查询用作表达式时,这种情况是不允许的。

追答

所以觉得你的语句很怪啊,charindex语句的用法是charindex() > 0 来判断的,如:
CHARINDEX('Rd',Address) > 0 or CHARINDEX('Road',Address)> 0

追问

我现在想实现的是:
db.id in user1.id
而user1.id结构是下面这样的,每个user1.id都是varchar类型组成的集合,将每个集合转换为int类型,来判断db.id是否在这个集合中,飞信能加好友吗?

id
1,2,3
4,5,6

追答

那用charindex函数判断是最好的,没有必要转换成int,如用
where charindex(','+db.id+',',','+user1.id+',') > 1 判断就好了

本回答被提问者采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网