charindex()实现字段值分割-------------基于非传统思维模式的sql编程

本文深入探讨了一个资深开发者在SQL数据库编程中的高级逻辑思维模式,通过实例展示了如何巧妙地处理复杂字符串,包括使用变量、函数及查询联合等技巧,最终将表A转换为表B的形式。文章还对比了两种不同的实现方式,揭示了在处理多个分隔符时,使用`charindex`函数相较于`substring`函数的优势。

入职一个月的这一天,见识到了一个工作7年的developer的逻辑思维模式,

在sql 数据库编程中,估计大多数的新手会和我有着相同的感觉,基本的逻辑思维加上熟练的sql语句可以搞定大多数问题。

今天leader developer 出了个题:

-------table A-------------                  ----------table B------------

id                    name         id         name

1       a            1          a

2       x,y,z          2           x

                    2                             y

                    2             z

目的就是如何把A 表弄成B表的样子

create table lxx_charindex(
id int,
name varchar(100)
)

insert into lxx_charindex values(1,'a')
insert into lxx_charindex values(2,'x,y,z')

 

老大的神奇思想:

create table temp_num ( n int );

DECLARE @i INT; SET @i=1 WHILE @i<=100 BEGIN INSERT INTO temp_num VALUES (@i); SET @i=@i+1 END

select * from lxx_charindex

select * from temp_num;

SELECT id, SUBSTRING(name,n,CHARINDEX(',',name+',',n)-n) as name ,temp_num.n as num

FROM lxx_charindex

join temp_num

ON SUBSTRING(','+name,n,1)=','

 

不知道读者能否看懂,但是本人着实好好琢磨了一下这个思想。说实话此时感觉到C的思想可以应用到任何领域啊~~~

n作为一个变量,实现字段值中逗号位置的判定,利用charindex函数实现截取字符的数量。慢慢琢磨

 2013-07-31又琢磨了一下这代码,发现有人些的代码可能更好懂一些:

Select
    a.id,name=substring(a.name,b.n,charindex(',',a.Col2+',',b.n)-b.n)
from
    lxx_charindex a,temp_num b
where
    charindex(',',','+a.name,b.n)=b.n --也可用 substring(','+a.temp_num,b.n,1)=','

但是where后面的条件使用charindex 要比使用substring 更好些,如果当分隔符不止一个时,比如a,,,b,,,使用charindex 比substring要更好些

 

不知道这个思想是不是更简单些,没有用JOIN  

 

转载于:https://www.cnblogs.com/lxxlovekang/p/3225324.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值