select * from WDNR where charindex(WDNR_SYZZ,'ORG201612011749170024,ORG201612011750240025')>0 我想的是查wdnr_syzz,根据后面那个字符串的每一个id,求并集 但是wdnr_syzz这个字段不是存的一个id 这样会查不到,怎么样使后面的字符串 一个个的查询WDNR_SYZZ 这是wdnr_syzz
为啥不用函数加到这个sql语句里。有截取的函数吧!自己查一下api.
我只知道这个字符截取函数substr(‘被截取字符' ,0,2) 不知道能不能帮上你
第一、为什么不用 wdnr_syzz in('ORG201612011749170024','ORG201612011750240025')呢?
第二、可以使用如下sql查询,达到你的要求
create table WDNR (
id int,
WDNR_SYZZ varchar(100)
)
INSERT INTO wdnr (id, WDNR_SYZZ)
VALUES (1, 'abcd000000001');
INSERT INTO wdnr (id, WDNR_SYZZ)
VALUES (2, 'abcd000000002');
INSERT INTO wdnr (id, WDNR_SYZZ)
VALUES (3, 'abcd000000003');
INSERT INTO wdnr (id, WDNR_SYZZ)
VALUES (4, 'abcd000000004');
INSERT INTO wdnr (id, WDNR_SYZZ)
VALUES (5, 'abcd000000005');
INSERT INTO wdnr (id, WDNR_SYZZ)
VALUES (6, 'abcd000000006');
SELECT * FROM wdnr WHERE 'abcd000000006,abcd000000005' like '%'+WDNR_SYZZ+'%'
我擦勒!又失手了!
不知楼主想要的是什么,不过, 授汝以鱼不如授汝以渔,下面的代码应该对你有帮助:
把wdnr中的id都拿出来
DECLARE
@WdnrSyzz VARCHAR(MAX) , --传入的字符串
@New VARCHAR(200) , --最终截取的字符串
@L INT , --字符串长度
@IdLength INT , --id的长度
@StrIndex INT, --字符串ORG的位置
@Stop INT
SET @WdnrSyzz = 'WDNR_SYZZ,''ORG201612011749170024,ORG201612011750240025,ORG201612011750240026'''
SET @L = LEN(@WdnrSyzz) --获取字符串长度
--PRINT @L
SET @Stop = 1
SET @IdLength = 21
SET @New = ''''
WHILE @Stop <> 0
BEGIN
SET @StrIndex = CHARINDEX('ORG', @WdnrSyzz)
IF @StrIndex <= @L-@IdLength
BEGIN
SET @New = @New + SUBSTRING(@WdnrSyzz,@StrIndex,@IdLength) + ','
SET @WdnrSyzz = SUBSTRING(@WdnrSyzz,@StrIndex+@IdLength+1,@L-@StrIndex-@IdLength+1)
PRINT '@WdnrSyzz: ' + @WdnrSyzz
SET @L = LEN(@WdnrSyzz)
END
ELSE
BEGIN
SET @New = SUBSTRING(@New,1,LEN(@New)-1) + ''''
SET @Stop = 0 --停止循环
END
END
PRINT '@NEW: ' + @NEW
DECLARE
@WdnrSyzz VARCHAR(MAX) , --传入的字符串
@New VARCHAR(200) , --最终截取的字符串
@L INT , --字符串长度
@IdLength INT , --id的长度
@StrIndex INT, --字符串ORG的位置
@Stop INT
SET @WdnrSyzz = 'WDNR_SYZZ,''ORG201612011749170024,ORG201612011750240025,ORG201612011750240026'''
SET @L = LEN(@WdnrSyzz) --获取字符串长度
--PRINT @L
SET @Stop = 1
SET @IdLength = 21
SET @New = ''''
WHILE @Stop <> 0
BEGIN
SET @StrIndex = CHARINDEX('ORG', @WdnrSyzz)
IF @StrIndex <= @L-@IdLength
BEGIN
SET @New = @New + SUBSTRING(@WdnrSyzz,@StrIndex,@IdLength) + ','
SET @WdnrSyzz = SUBSTRING(@WdnrSyzz,@StrIndex+@IdLength+1,@L-@StrIndex-@IdLength+1)
PRINT '@WdnrSyzz: ' + @WdnrSyzz
SET @L = LEN(@WdnrSyzz)
END
ELSE
BEGIN
SET @New = SUBSTRING(@New,1,LEN(@New)-1) + ''''
SET @Stop = 0 --停止循环
END
END
PRINT '@NEW: ' + @NEW
不知楼主想要的是什么,不过, 授汝以鱼不如授汝以渔,下面的代码应该对你有帮助:
把wdnr_syzz中的id都拿出来
DECLARE
@WdnrSyzz VARCHAR(MAX) , --传入的字符串
@New VARCHAR(200) , --最终截取的字符串
@L INT , --字符串长度
@IdLength INT , --id的长度
@StrIndex INT, --字符串ORG的位置
@Stop INT
SET @WdnrSyzz = 'WDNR_SYZZ,''ORG201612011749170024,ORG201612011750240025,ORG201612011750240026'''
SET @L = LEN(@WdnrSyzz) --获取字符串长度
--PRINT @L
SET @Stop = 1
SET @IdLength = 21
SET @New = ''''
WHILE @Stop <> 0
BEGIN
SET @StrIndex = CHARINDEX('ORG', @WdnrSyzz)
IF @StrIndex <= @L-@IdLength
BEGIN
SET @New = @New + SUBSTRING(@WdnrSyzz,@StrIndex,@IdLength) + ','
SET @WdnrSyzz = SUBSTRING(@WdnrSyzz,@StrIndex+@IdLength+1,@L-@StrIndex-@IdLength+1)
PRINT '@WdnrSyzz: ' + @WdnrSyzz
SET @L = LEN(@WdnrSyzz)
END
ELSE
BEGIN
SET @New = SUBSTRING(@New,1,LEN(@New)-1) + ''''
SET @Stop = 0 --停止循环
END
END
PRINT '@NEW: ' + @NEW