2 a673328604 a673328604 于 2017.01.05 15:07 提问

sqlserver 如何截取字符串查询

select * from WDNR where charindex(WDNR_SYZZ,'ORG201612011749170024,ORG201612011750240025')>0 我想的是查wdnr_syzz,根据后面那个字符串的每一个id,求并集 但是wdnr_syzz这个字段不是存的一个id 这样会查不到,怎么样使后面的字符串 一个个的查询WDNR_SYZZ 这是wdnr_syzz图片说明

7个回答

qq_33547043
qq_33547043   2017.01.05 15:12

为啥不用函数加到这个sql语句里。有截取的函数吧!自己查一下api.

wangchunyu11155
wangchunyu11155   2017.01.05 15:13

我只知道这个字符截取函数substr(‘被截取字符' ,0,2) 不知道能不能帮上你

a673328604
a673328604 额 考虑过 然后不好使 太死了
11 个月之前 回复
huhedong1182738042
huhedong1182738042   2017.01.05 15:53

第一、为什么不用 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+'%'

csmzl
csmzl   2017.01.05 17:18

不知楼主想要的是什么,不过, 授汝以鱼不如授汝以渔,下面的代码应该对你有帮助:
把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
csmzl
csmzl   2017.01.05 17:16

我擦勒!又失手了!
不知楼主想要的是什么,不过, 授汝以鱼不如授汝以渔,下面的代码应该对你有帮助:
把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
csmzl
csmzl   2017.01.05 17:17

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
csmzl
csmzl   2017.01.05 17:24

我擦勒!我告诉你一个密码,我写的代码在360浏览器中可以隐藏!,用360浏览器打开你是看不见我写的代码的!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!