zoukankan      html  css  js  c++  java
  • charindex()实现字段值分割-------------基于非传统思维模式的sql编程

    入职一个月的这一天,见识到了一个工作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  

  • 相关阅读:
    定时任务 常用cron表达式
    链接UTF-8编码带BOM尾,访问出现404
    centos安装nginx
    cnetos安装jdk
    javaweb数据分页
    mvn clean install对idea中项目结构的影响
    spring使用servlet过滤器filter,进行登录校验
    docker安装mysql并修改远程登陆权限
    使用token令牌控制接口幂等性
    718.最长重复子数组
  • 原文地址:https://www.cnblogs.com/lxxlovekang/p/3225324.html
Copyright © 2011-2022 走看看