sql拆分查询
有这样一个需求:

临时表sql:
create table #AA
(
ID int,
Name nvarchar(20)
) insert #AA
select 1,'苏州/上海/温州'
union all
select 2,'南京'
union all
select 3,'北京/连云港'
方法:
with hh as
(select ID,
Name=cast(left(Name,charindex('/',Name+'/')-) as nvarchar()),
Split=cast(stuff(Name+'/',,charindex('/',Name+','),'') as nvarchar())
from (SELECT ID,Name FROM #AA) t
union all
select ID,
Name=cast(left(Split,charindex('/',Split)-) as nvarchar()),
Split= cast(stuff(Split,,charindex('/',Split),'') as nvarchar()) from hh where split>'') select ID,Name from hh group by ID,Name
感觉这个查询还是比较复杂的,下面就这个查询中用到的知识点做一个梳理。
1.charindex函数:返回字符或字符串在另一个字符串中开始的位置,如下所示:

如果找不到则返回0,自己可以试一下。
2.left函数
取一个字符串的前若干位,如下:

right函数是同样的道理,只是方向不同。
3.cast方法,转换类型的方法之一,如下:

上面也演示了convert转换的方法。
4 with as的用法,请参看另一个练习示例。
5.stuff方法
学习链接:http://www.cnblogs.com/345563452/archive/2009/10/29/1592048.html
该方法的作用:删除指定长度的字符串,并在指定的起点插入另一组字符。这个方法的参数比较多,有4个,所以看起来比较费劲。如下:

里面的参数有必要说明一下:
2表示删除的起始位置;3表示删除的长度;‘123’表示要插入的字符串。
片段分析:

with hhh as
(
select ID,
Name=cast(left(Name,charindex('/',Name+'/')-) as nvarchar()),
Split=SUBSTRING(Name,charindex('/',Name)+,LEN(Name)-charindex('/',Name))
from (SELECT ID,Name FROM #AA) t
union all
select ID,
Name=cast(left(Split,charindex('/',Split+'/')-) as nvarchar()),
Split=(case when charindex('/',Split)> then
SUBSTRING(Split,charindex('/',Split)+,LEN(Split)-charindex('/',Split))
else '' end)
from hhh where split>''
)
select ID,Name from hhh group by ID,Name
sql拆分查询的更多相关文章
- SQL 提高查询效率
1.关于SQL查询效率,100w数据,查询只要1秒,与您分享: 机器情况p4: 2.4内存: 1 Gos: windows 2003数据库: ms sql server 2000目的: 查询性能测试, ...
- SQL Server 查询分析器提供的所有键盘快捷方式(转)
下表列出 SQL Server 查询分析器提供的所有键盘快捷方式. 活动 快捷方式 书签:清除所有书签. CTRL-SHIFT-F2 书签:插入或删除书签(切换). CTRL+F2 书签:移动到下一个 ...
- 一次SQL慢查询的优化处理
背景 在开发完成,数据验证的过程中,需要对两个非常大的表进行query,运行了十几分钟都跑不完.如下: select * from big_a a, big_b b where a.some_id = ...
- SQL Server 查询分析器键盘快捷方式
下表列出 SQL Server 查询分析器提供的所有键盘快捷方式. 活动 快捷方式 书签:清除所有书签. CTRL-SHIFT-F2 书签:插入或删除书签(切换). CTRL+F2 书签:移动到下一个 ...
- 数据库表设计时一对一关系存在的必要性 数据库一对一、一对多、多对多设计 面试逻辑题3.31 sql server 查询某个表被哪些存储过程调用 DataTable根据字段去重 .Net Core Cors中间件解析 分析MySQL中哪些情况下数据库索引会失效
数据库表设计时一对一关系存在的必要性 2017年07月24日 10:01:07 阅读数:694 在表设计过程中,我无意中觉得一对一关系觉得好没道理,直接放到一张表中不就可以了吗?真是说,网上信息什么都 ...
- Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等)
Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等) 子查询 描述:查询订单数超过5的顾客信息 查询句法: var 子查询 = from c i ...
- SQL联合查询:子表任一记录与主表联合查询
今天有网友群里提了这样一个关于SQL联合查询的需求: 一.有热心网友的方案: 二.我的方案: select * from ( select a.*,(select top 1 Id from B as ...
- sql语句查询
1. sql语句查询某位数字或者某几位数字开头的数据,字段类型为数字类: %’: 2. sql搜索以4开头和含有李字的数据: select * from wlzbpre_user where real ...
- SQL联合查询(内联、左联、右联、全联)的语法(转)
最近在做一个比较复杂的业务,涉及的表较多,于是在网上找了一些sql联合查询的例子进行研究使用. 概述: 联合查询效率较高,举例子来说明联合查询:内联inner join .左联left outer j ...
随机推荐
- nodejs的mysql模块学习(七)连接池事件
连接池事件 connection 当建立连接的时候就会触发 pool.on('connection' function(connection){ connection.query('SET SESSI ...
- Windows环境下安装Redis
1:首先下载redis.从下面地址下:https://github.com/MSOpenTech/redis/releases2:创建redis.conf文件:这是一个配置文件,指定了redis的监听 ...
- WinDBG快速定位异常位置
在WinDBG中通过搜索内存中保存的CONTEXT结构来定位发生的异常信息,再通过WinDBG命令.cxr显示对应的调用堆栈信息. .foreach ( place { s-[1]d 0 L?FF ...
- centos 下 yum安装和卸载软件
安装的命令是,yum install xxx,yum会查询数据库,有无这一软件包,如果有,则检查其依赖冲突关系,如果没有依赖冲突,那么最好,下载安装;如果有,则会给出提示,询问是否要同时安装依赖,或删 ...
- UIPickerView 简单操作和实际应用
1.UIPickerView 选择指示器控件 //选择器的初始化 UIPickerView * pickerView = [[UIPickerView alloc] initWithFrame:CGR ...
- 查询SQL SERVER数据库日志工具
在SQL SERVER中查看操作日志,一直是一个比较麻烦的事情,因为微软并没有提供直接的系统工具可以查看日志内容,虽然可以通过非正式的隐藏接口dbcc log 获取日志的非解析编码但是要还原是个非常麻 ...
- EasyGUI的安装
1.下载EasyGUI 在官方网站上下载http://easygui.sourceforge.net/将安装包下载下来,放到桌面上并解压. 2.安装EasyGUI ①在开始菜单的搜索中输入cmd,打开 ...
- DATASNAP REST WEBSERVICES中间件如何跨平台使用
DATASNAP REST WEBSERVICES中间件如何跨平台使用 准备使用DELPHI开发移动设备开发的朋友对DATASNAP REST中间件不可不了解. DATASNAP REST新型WE ...
- React Native学习-调取摄像头第三方组件:react-native-image-picker
近期做的软件中图片处理是重点,那么自然也就用到了相机照相或者相册选取照片的功能. react-native中有image-picker这个第三方组件,但是0.18.10这个版本还不是太支持iPad. ...
- git基础入门之常用命令操作
本内容参考:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 初学,有什么不对的地方 ...