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 ...
随机推荐
- 【Android 界面效果31】Android--侧滑菜单应用的实现
侧滑菜单应用现在非常多,而且实现方式也多种多样.通过在网上的多方查找,我找到郭霖少侠的这篇文章:http://blog.csdn.net/guolin_blog/article/details/874 ...
- iOS - UI - UIPageControl
1.UIPageControl 分页控件 //分页控件初始化 UIPageControl * pageControl = [[UIPageControl alloc] init]; //分页页数 pa ...
- emoji表情符处理替换成空格
/** * 用filterOffUtf8Mb4 * Description: 过滤率四个字节的utf-8字符(emoji表情符),替换成四个空格. * 四字节utf- ...
- [Android]天气App 1
闲赋在家,无事可做就想着做点东西,于是乎把玩手机,我最常用的就是看天气,基本上我每天起来第一件事就是看天气,哈哈,用别人的这么爽,为什么不自己整一个关于天气的应用呢,墨迹天气.小米系统自带的天气.ya ...
- js 当前日期处理 获取
var myDate = new Date();myDate.getYear(); //获取当前年份(2位)myDate.getFullYear(); //获取完整的年份(4位,1 ...
- [转]Advanced Oracle SQL Developer Features
本文转自:http://www.oracle.com/technetwork/cn/server-storage/linux/sqldev-adv-otn-092384.html Advanced O ...
- 剑指Offer10 打印1到最大n位数
/************************************************************************* > File Name: 10_PrintT ...
- SharePoint - 添加图片到Survey的某一问题之上
Survey是SharePoint常用功能之一,而曾经被用户多次问到的问题是能否在Survey的某一问题上添加图片,经过查看,SharePoint Survey不提供此方法,只得谷歌之,得一比较懒但又 ...
- $(function(){})与$(document).ready(function(){})
$(function(){ //jq ready()的简写 }); $(document).ready(function(){ // }); 或者: $().ready(function(){ //j ...
- js取单选按钮,复选按钮的值
$("input[name=PType]").bind('click', function () { if ($(this).prop("checked")) ...