Separating elements
Separating elements is a classic T-SQL challenge. It involves a table called Arrays with strings holding comma-separated lists of values in a column called arr.
Run the following code to create the Arrays table, and populate it with sample data:
SET NOCOUNT ON; USE tempdb; IF OBJECT_ID(N'dbo.Arrays', N'U') IS NOT NULL
DROP TABLE dbo.Arrays; CREATE TABLE dbo.Arrays (
id VARCHAR(10) NOT NULL PRIMARY KEY
, arr VARCHAR(8000) NOT NULL
);GO INSERT INTO dbo.Arrays
VALUES (
'A'
,'20,223,2544,25567,14'
); INSERT INTO dbo.Arrays
VALUES (
'B'
,'30,-23433,28'
); INSERT INTO dbo.Arrays
VALUES (
'C'
,'12,10,8099,12,1200,13,12,14,10,9'
); INSERT INTO dbo.Arrays
VALUES (
'D'
,'-4,-6,-45678,-2'
);
The challenge, therefore, is to find an efficient set-based solution using T-SQL. To implement such a solution, you will want to split the task into three steps:
1. Generate copies.
2. Extract an element.
3. Calculate the position.
Generate copies
SELECT id
,arr
,n
FROM dbo.Arrays
INNER JOIN AdventureWorks2014.dbo.Nums
ON n <= LEN(arr) AND SUBSTRING(N','+arr, n, 1) = ',';
This code generates the following output:
Extract an element
SUBSTRING(arr, n, CHARINDEX(',', arr + ',', n) – n).
Calculate the position
SELECT
id
,ROW_NUMBER() OVER ( PARTITION BY id ORDER BY n) AS pos
,SUBSTRING(arr, n, CHARINDEX(',', arr + ',', n) - n) AS element
FROM dbo.Arrays
INNER JOIN AdventureWorks2014.dbo.Nums
ON n <= LEN(arr) + 1 AND SUBSTRING(',' + arr, n, 1) = ',';
T-SQL Recipes之Separating elements的更多相关文章
-
(转) [it-ebooks]电子书列表
[it-ebooks]电子书列表 [2014]: Learning Objective-C by Developing iPhone Games || Leverage Xcode and Obj ...
-
#定位系统性能瓶颈# strace &;amp; ltrace
strace和ltrace分别相应的是系统调用和库函数调用, 系统调用实际上就是指最底层的一个调用,在linux程序设计里面就是底层调用的意思,面向的是硬件. 而库函数调用则面向的是应用开发的.相当于 ...
-
10gocm-&;gt;session5-&;gt;数据库管理实验
Oracle数据库管理实验 一 传输表空间 二 创建分区表和分区索引 三 FGA细粒度审计 四 监控索引使用情况 五 创建含特殊字段类型的表 六 Flashback闪回技术 一 传输表空间,将ocmd ...
-
20145311王亦徐 《网络对抗技术》 Web安全基础实践
2014531王亦徐 <网络对抗技术> Web安全基础实践 实验内容 利用WebGoat平台尝试了一些XSS.CSRF.SQL注入攻击 基础问题回答 1.SQL注入攻击原理,如何防御原理: ...
-
linux神器 strace解析
除了人格以外,人最大的损失,莫过于失掉自信心了. 前言 strace可以说是神器一般的存在了,对于研究代码调用,内核级调用.系统级调用有非常重要的作用.打算了一周了,只有原文,一直没有梳理,拖延症犯了 ...
-
《Entity Framework 6 Recipes》中文翻译系列 (12) -----第三章 查询之使用SQL语句
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 3-2使用原生SQL语句更新 问题 你想在实体框架中使用原生的SQL语句,来更新底层 ...
-
《Entity Framework 6 Recipes》中文翻译系列 (13) -----第三章 查询之使用Entity SQL
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 3-4使用实体SQL查询模型 问题 你想通过执行Entity SQL语句来查询你的实 ...
-
ibatis动态sql配置启动时提示:The content of elements must consist of well-formed character data...
ibatis动态sql配置启动时提示:The content of elements must consist of well-formed character data... 2012-07-18 ...
-
【翻译】Flink Table Api &; SQL —— 连接到外部系统
本文翻译自官网:Connect to External Systems https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev ...
随机推荐
-
[ucgui] 彩色条函数
/* 颜色条 */ void ShowColorBar(void) { , y0 = , yStep = , i; int NumColors = LCD_GetDevCap(LCD_DEVCAP_N ...
-
Windows下配置使用MemCached
工具: memcached-1.2.6-win32-bin.zip MemCached服务端程序(for win) Memcached Manager win下的Mem ...
-
JavaScript数值转换总结
在JavaScript中,数值转换一般有三种方式: 一.Number(param)函数:param可以用于任何数据类型 1.1 param是Boolean值,true和false分别转换为1和0: ...
-
break语句的使用
先举一个简单点的例子 #include<stdio.h> #include<stdlib.h> int main() { float a,b; char c; printf(& ...
-
Python学习笔记——基础篇【第五周】——模块
模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...
-
认清Javascript的地位并编写合理的Javascript代码
作为前端程序员,一定要认清javascript的地位,不要被它乱七八糟的特点所迷惑.JavaScript主要是用来操控和重新调整DOM,通过修改DOM结构,从而达到修改页面效果的目的. 要用这个中心思 ...
-
try{}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会 不会被执行,什么时候被执行,在 return 前还是后?
这是一道面试题,首先finally{}里面的code肯定是会执行的,至于在return前还是后, 看答案说的是在return后执行,我觉得不对,百度了一下,有说return前的,有说return后的, ...
-
祝雷(依乐祝):一份来自29岁.NET老程序员的自白
潘老师的文笔果然了得,经过潘老师的妙笔生花后,文章的阅读体验果然好了很多!这里再次感谢潘老师的支持! 祝雷(合肥.NET 俱乐部发起人) [个人介绍] 博客园知名博主(依乐祝).6年以上.NET技术栈 ...
-
windows 安装xadmin
1.访问github :https://github.com/sshwsfc/xadmin 2.新建README.rst 并替换到下载的zip文件中 3.cmd下,进入虚拟环境使用pip instal ...
-
Unity3D料槽设备旋转(一)
1.使用C#创建控制游戏对象的的脚本语言, 第一步: 在project师徒中create 一个C#脚本,将其按照自己的设备名称进行命名,这里我将其简单的命名成zhuaquanzhou.cs 使用编辑器 ...