charindex()实现字段值分割-------------基于非传统思维模式的sql编程
2013-07-30 15:45
447 查看
入职一个月的这一天,见识到了一个工作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
在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
相关文章推荐
- Java 并发编程-再谈 AbstractQueuedSynchronizer 2:共享模式与基于 Condition 的等待 / 通知机制实现
- 基于C#的socket编程的TCP异步实现
- Java设计模式——代理模式实现及原理(基于java8)
- SQL的基于Qt的编程实践---3--表查询插入
- java Socket基于TCP协议编程实现通信
- Java实现超市管理系统Class思维模式实现,空指针问题常见处理办法
- 基于struct2实现保存图片到mysql的blob字段和显示
- WINDOWS (服务器) 和 DOS(客户端) 网络互连 基于TCP/IP的编程实现
- 面向对象编程、面向服务架构、基于组件开发三种编程模式的区别和适用领域
- 基于Java语言的安卓编程学习之八UI界面的编程实现
- [ZT]基于Spring实现远程服务编程
- GPU上基于SIMD的实现模式与多核CPU上基于MIMD的实现模式各有什么优缺点
- Atitit 三种并发编程模型 艾龙 attilax总结 1. 并发系统可以使用不同的并发模型去实现。 1 2. 并行工作者 并行工作者模型。进来的任务分配给不同的工作者 银行模式 2 2.1.
- 基于键值的观察者模式编程
- oracle+mybatis 使用动态Sql当插入字段不确定的情况下实现批量insert
- Android编程实现基于BitMap获得图片像素数据的方法
- JDBC学习之路(六)--基于Properties配置文件的工厂生产模式的低耦合实现
- <<Linux内核完全剖析 --基于0.12内核>>学习笔记 第4章 80x86保护模式及其编程 4.7 任务管理
- 基于visual c++之windows核心编程代码分析(47)实现交换网络的QQ号嗅探
- 基于visual c++之windows核心编程代码分析(54)实现Winlogon注入dll