有这样一个需求:

临时表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拆分查询的更多相关文章

  1. SQL 提高查询效率

    1.关于SQL查询效率,100w数据,查询只要1秒,与您分享: 机器情况p4: 2.4内存: 1 Gos: windows 2003数据库: ms sql server 2000目的: 查询性能测试, ...

  2. SQL Server 查询分析器提供的所有键盘快捷方式(转)

    下表列出 SQL Server 查询分析器提供的所有键盘快捷方式. 活动 快捷方式 书签:清除所有书签. CTRL-SHIFT-F2 书签:插入或删除书签(切换). CTRL+F2 书签:移动到下一个 ...

  3. 一次SQL慢查询的优化处理

    背景 在开发完成,数据验证的过程中,需要对两个非常大的表进行query,运行了十几分钟都跑不完.如下: select * from big_a a, big_b b where a.some_id = ...

  4. SQL Server 查询分析器键盘快捷方式

    下表列出 SQL Server 查询分析器提供的所有键盘快捷方式. 活动 快捷方式 书签:清除所有书签. CTRL-SHIFT-F2 书签:插入或删除书签(切换). CTRL+F2 书签:移动到下一个 ...

  5. 数据库表设计时一对一关系存在的必要性 数据库一对一、一对多、多对多设计 面试逻辑题3.31 sql server 查询某个表被哪些存储过程调用 DataTable根据字段去重 .Net Core Cors中间件解析 分析MySQL中哪些情况下数据库索引会失效

    数据库表设计时一对一关系存在的必要性 2017年07月24日 10:01:07 阅读数:694 在表设计过程中,我无意中觉得一对一关系觉得好没道理,直接放到一张表中不就可以了吗?真是说,网上信息什么都 ...

  6. Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等)

    Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等) 子查询 描述:查询订单数超过5的顾客信息 查询句法: var 子查询 = from c i ...

  7. SQL联合查询:子表任一记录与主表联合查询

    今天有网友群里提了这样一个关于SQL联合查询的需求: 一.有热心网友的方案: 二.我的方案: select * from ( select a.*,(select top 1 Id from B as ...

  8. sql语句查询

    1. sql语句查询某位数字或者某几位数字开头的数据,字段类型为数字类: %’: 2. sql搜索以4开头和含有李字的数据: select * from wlzbpre_user where real ...

  9. SQL联合查询(内联、左联、右联、全联)的语法(转)

    最近在做一个比较复杂的业务,涉及的表较多,于是在网上找了一些sql联合查询的例子进行研究使用. 概述: 联合查询效率较高,举例子来说明联合查询:内联inner join .左联left outer j ...

随机推荐

  1. nodejs的mysql模块学习(七)连接池事件

    连接池事件 connection 当建立连接的时候就会触发 pool.on('connection' function(connection){ connection.query('SET SESSI ...

  2. Windows环境下安装Redis

    1:首先下载redis.从下面地址下:https://github.com/MSOpenTech/redis/releases2:创建redis.conf文件:这是一个配置文件,指定了redis的监听 ...

  3. WinDBG快速定位异常位置

    在WinDBG中通过搜索内存中保存的CONTEXT结构来定位发生的异常信息,再通过WinDBG命令.cxr显示对应的调用堆栈信息.   .foreach ( place { s-[1]d 0 L?FF ...

  4. centos 下 yum安装和卸载软件

    安装的命令是,yum install xxx,yum会查询数据库,有无这一软件包,如果有,则检查其依赖冲突关系,如果没有依赖冲突,那么最好,下载安装;如果有,则会给出提示,询问是否要同时安装依赖,或删 ...

  5. UIPickerView 简单操作和实际应用

    1.UIPickerView 选择指示器控件 //选择器的初始化 UIPickerView * pickerView = [[UIPickerView alloc] initWithFrame:CGR ...

  6. 查询SQL SERVER数据库日志工具

    在SQL SERVER中查看操作日志,一直是一个比较麻烦的事情,因为微软并没有提供直接的系统工具可以查看日志内容,虽然可以通过非正式的隐藏接口dbcc log 获取日志的非解析编码但是要还原是个非常麻 ...

  7. EasyGUI的安装

    1.下载EasyGUI 在官方网站上下载http://easygui.sourceforge.net/将安装包下载下来,放到桌面上并解压. 2.安装EasyGUI ①在开始菜单的搜索中输入cmd,打开 ...

  8. DATASNAP REST WEBSERVICES中间件如何跨平台使用

    DATASNAP REST WEBSERVICES中间件如何跨平台使用   准备使用DELPHI开发移动设备开发的朋友对DATASNAP REST中间件不可不了解. DATASNAP REST新型WE ...

  9. React Native学习-调取摄像头第三方组件:react-native-image-picker

    近期做的软件中图片处理是重点,那么自然也就用到了相机照相或者相册选取照片的功能. react-native中有image-picker这个第三方组件,但是0.18.10这个版本还不是太支持iPad. ...

  10. git基础入门之常用命令操作

    本内容参考:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 初学,有什么不对的地方 ...