sql语句将1,2,3字符串转换为int类型
条件:db.idin(charindex(','+ltrim(o.organizationid)+',',(select','+user1.idfromuser1)))其...
条件:db.id in (charindex(','+ltrim(o.organizationid)+',', (select ','+user1.id from user1) ))
其中user1的存储的是varchar类型的字符串类似于1,2,3.
想通过判断db的id是否在user1的id中 展开
其中user1的存储的是varchar类型的字符串类似于1,2,3.
想通过判断db的id是否在user1的id中 展开
3个回答
展开全部
问题不太明了。
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)))
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' ) 是不一样的。
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', ','))
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', ','))
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用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
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询