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的更多相关文章

  1. (转) [it-ebooks]电子书列表

    [it-ebooks]电子书列表   [2014]: Learning Objective-C by Developing iPhone Games || Leverage Xcode and Obj ...

  2. #定位系统性能瓶颈# strace &amp;amp; ltrace

    strace和ltrace分别相应的是系统调用和库函数调用, 系统调用实际上就是指最底层的一个调用,在linux程序设计里面就是底层调用的意思,面向的是硬件. 而库函数调用则面向的是应用开发的.相当于 ...

  3. 10gocm-&amp;gt;session5-&amp;gt;数据库管理实验

    Oracle数据库管理实验 一 传输表空间 二 创建分区表和分区索引 三 FGA细粒度审计 四 监控索引使用情况 五 创建含特殊字段类型的表 六 Flashback闪回技术 一 传输表空间,将ocmd ...

  4. 20145311王亦徐 《网络对抗技术》 Web安全基础实践

    2014531王亦徐 <网络对抗技术> Web安全基础实践 实验内容 利用WebGoat平台尝试了一些XSS.CSRF.SQL注入攻击 基础问题回答 1.SQL注入攻击原理,如何防御原理: ...

  5. linux神器 strace解析

    除了人格以外,人最大的损失,莫过于失掉自信心了. 前言 strace可以说是神器一般的存在了,对于研究代码调用,内核级调用.系统级调用有非常重要的作用.打算了一周了,只有原文,一直没有梳理,拖延症犯了 ...

  6. 《Entity Framework 6 Recipes》中文翻译系列 (12) -----第三章 查询之使用SQL语句

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 3-2使用原生SQL语句更新 问题 你想在实体框架中使用原生的SQL语句,来更新底层 ...

  7. 《Entity Framework 6 Recipes》中文翻译系列 (13) -----第三章 查询之使用Entity SQL

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 3-4使用实体SQL查询模型 问题 你想通过执行Entity SQL语句来查询你的实 ...

  8. 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 ...

  9. 【翻译】Flink Table Api &amp; SQL —— 连接到外部系统

    本文翻译自官网:Connect to External Systems  https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev ...

随机推荐

  1. .Net 转战 Android 4.4 日常笔记(5)--新软件Android Studio 0.5.8安装与配置及问题解决

    说真心话,Eclipse跟我们.net的VS比起来就是屌丝比高富帅,一切都是那么的难用,速度慢得我无法忍受 于是想试试Google钦点的Android Studio IDE工具,这跟ADT一样也是一套 ...

  2. 关于调用deleteRowsAtIndexPaths withRowAnimation方法出现错误

    通常原因是因为 这个方法的调用与数据源有关. 检测1.你的数据源是否写死了. 2.调用该方法前你是否移除相关的数据源 相关的核心代码如下: - (NSInteger)tableView:(UITabl ...

  3. 检查Chunksum与Chunk Data之间的缓冲区发送到DataNode节点

    我们会看到左边"iOS Apps"下面有四个选项:"Certificates"."Identifiers"."Devices&qu ...

  4. shiro 更改登录的用户名

    ShiroUser user = (ShiroUser) SecurityUtils.getSubject().getPrincipal(); user.name = newName;

  5. Linux下用信号量实现对共享内存的访问保护

    转自:http://www.cppblog.com/zjl-1026-2001/archive/2010/03/03/108768.html 最近一直在研究多进程间通过共享内存来实现通信的事情,以便高 ...

  6. poj 1265 Area (Pick定理+求面积)

    链接:http://poj.org/problem?id=1265 Area Time Limit: 1000MS   Memory Limit: 10000K Total Submissions:  ...

  7. node.js的学习

    require('http') 内置模块 server.js var http = require('http'); function start(){ server = http.createSer ...

  8. Ext tpl 造成 store不能正确加载

    最近维护别人写的代码的时候,遇到了这么个情况 找原因找到了这行代码的身上 tpl: '<tpl for="."><div ext:qtip="{name ...

  9. JFinal开发8个常见问题

    下面是8个最常见的问题总结. 1.Can not create instance of class: demo.DemoConfig. 觉得应该是你的路径有问题, 打开你项目的java build p ...

  10. 团队作业4--第一次项目冲刺(Alpha版本)6

    一.Daily Scrum Meeting照片 二.燃尽图 三.项目进展 1.对功能界面进行优化 2.对算法进行改进优化,提高运行速度 四.困难与问题 首先我们团队通过讨论,对功能界面进行了优化,让界 ...