通过分隔符将 T-SQL 字符串拆分为列?

2023-11-29

我有一个表,其中有一列使用连字符分隔的八个值集,其中一些为空白。我试图将此字符串拆分为列,每个值对应于分隔字符串的位置:

Table1:

Record StringValue
rec1 422100----130-1034-10901-12000
rec2 421100--CORP--130-1034--
rec3 423000----130-1561--
rec4 111500-------
rec5 661300-710-CORP--355-1106-10901-10100

期望的结果:

Record col1 col2 col3 col4 col5 col6 col7 col8
rec1 422100 NULL NULL NULL 130 1034 10901 12000
rec2 421100 NULL CORP NULL 130 1034 NULL NULL
rec3 423000 NULL NULL NULL 130 1561 NULL NULL
rec4 111500 NULL NULL NULL NULL NULL NULL NULL
rec5 661300 710 CORP NULL 355 1106 10901 10100

我尝试了一系列复杂的 SUBSTRING/CHARINDEX 函数,这些函数可以工作,但我很好奇是否有更合适的解决方案?当我尝试 PARSENAME 函数时,它仅返回 NULL 值,因为字符串中的每个位置都没有值。

SELECT 
    Record
    ,PARSENAME(REPLACE(StringValue, '-', '.'), 1) AS col1
    ,PARSENAME(REPLACE(StringValue, '-', '.'), 2) AS col2
    ,PARSENAME(REPLACE(StringValue, '-', '.'), 3) AS col3
    ,PARSENAME(REPLACE(StringValue, '-', '.'), 4) AS col4
    ,PARSENAME(REPLACE(StringValue, '-', '.'), 5) AS col5
    ,PARSENAME(REPLACE(StringValue, '-', '.'), 6) AS col6
    ,PARSENAME(REPLACE(StringValue, '-', '.'), 7) AS col7
    ,PARSENAME(REPLACE(StringValue, '-', '.'), 8) AS col8
FROM table1

正如你现在所知,parsename()仅限 4 个职位。

这是一个 JSON 选项(假设 2016 年以上)

 Select A.Record
       ,Pos1 = nullif(JSON_VALUE(JS,'$[0]'),'') --nullif() optional otherwise empty string
       ,Pos2 = nullif(JSON_VALUE(JS,'$[1]'),'')
       ,Pos3 = nullif(JSON_VALUE(JS,'$[2]'),'')
       ,Pos4 = nullif(JSON_VALUE(JS,'$[3]'),'')
       ,Pos5 = nullif(JSON_VALUE(JS,'$[4]'),'')
       ,Pos6 = nullif(JSON_VALUE(JS,'$[5]'),'')
       ,Pos7 = nullif(JSON_VALUE(JS,'$[6]'),'')
       ,Pos8 = nullif(JSON_VALUE(JS,'$[7]'),'')
 From  YourTable A
 Cross Apply (values ('["'+replace(string_escape([StringValue],'json'),'-','","')+'"]') ) B(JS)

Results

enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过分隔符将 T-SQL 字符串拆分为列? 的相关文章

  • SQL 连接两个没有关系的表

    我有具有相同结构的不同表 我想通过其中一列将它们连接起来 问题是他们不共享该专栏中的信息 Table 1 Type A Name Value Table 2 Type B Name Value 结果表 在单列中 nameFromA name
  • MYSQL从每个类别中随机选择一条记录

    我有一个数据库Items表看起来像这样 id name category int 有几十万条记录 每个item可以是 7 种不同的之一categories 对应于categories table id category 我想要一个从每个类别
  • 如何使用 BigQuery 有效地选择另一个表中匹配子字符串的记录?

    我有一个包含数百万个字符串的表 我想将其与包含大约两万个字符串的表进行匹配 如下所示 standardSQL SELECT record FROM record JOIN fragment ON record name LIKE CONCA
  • Spark SQL 中的 SQL LIKE

    我正在尝试使用 LIKE 条件在 Spark SQL 中实现联接 我正在执行连接的行看起来像这样 称为 修订 Table A 8NXDPVAE Table B 4 8 NXD V 在 SQL Server 上执行联接 A revision
  • 如何通过SQL查询检查是否有JSON函数?

    有SQL 2016 中的 JSON 函数 https learn microsoft com en us sql t sql functions json functions transact sql例如 JSON VALUE JSON Q
  • 我是否需要在外键上指定 ON DELETE NO ACTION?

    我有以下与 SQL Server 2012 一起使用的 DDL CREATE TABLE Subject SubjectId INT IDENTITY 1 1 NOT NULL Name NVARCHAR 50 Not NULL CONST
  • 是否可以引用同一个表中的不同列?

    如果博客有一个 类别 表 如下所示 CREATE TABLE categories id INTEGER PRIMARY KEY AUTO INCREMENT parent id INTEGER NOT NULL name VARCHAR
  • SQL Server 架构和默认架构

    我的数据库中有一个模式定义 除了现在每次执行 sql 语句时我都必须提供模式 SELECT FROM myschema table 我使用 Management Studio 为我的用户设置了默认架构 并运行了ALTER USER myUs
  • 删除连接中不存在的记录

    想象两个表 A 和 B A B 1 2 2 3 6 5 4 7 9 11 13 23 9 现在我想从 A 中删除 B 中不存在的记录 例如从 A 中删除 1 6 和 4 我最初的想法是您可以 否定 联接的结果 DELETE FROM A W
  • SQL Server:应用正则表达式替换

    这是我的 SQL 查询 select codi nivell from anc documents 示例数据是 06080100000000 06080100000000 06080100000000 06080100000000 0608
  • 使用默认路径中的文件创建数据库

    我想创建一个创建数据库的 SQL 脚本 现在 我有这个 CREATE DATABASE Documents ON PRIMARY NAME N Documents FILENAME N Documents mdf LOG ON NAME N
  • Oracle SQL 分析查询 - 类似递归电子表格的运行总计

    我有以下数据 由A值 排序依据MM 月 The B列计算为GREATEST current value of A previous value of B 0 以类似电子表格的方式 我怎样才能计算B使用 SQL 查询 我尝试使用分析函数 但未
  • 在 MySQL 中将值设置为 NULL

    我想要一个值被设置为NULL如果我提交的表单中的文本框中没有输入任何内容 我怎样才能做到这一点 我试过插入 NULL 但这只是添加了这个词NULL进入现场 我不确定我应该为此提供什么代码 我只是编写一个 UPDATE 查询 不要放NULL更
  • MySQL为每个组创建带有序列号的视图

    我在此网站上看到了类似的解决方案 但由于变量使用限制 它在视图中不可用 在MySQL中为每个组生成序列 https stackoverflow com questions 30118096 generating sequence for e
  • 同一表中同一列的 SQL 完全外连接

    这可能更多的是一个设计问题 但我希望这在没有太多巫术的情况下是可能的 假设我有一个这样的表 SELECT FROM stuff id grp 1 a 2 a 3 a 1 b 2 b 4 b 我想要得到这样的东西 ID 按列分组 a id b
  • 如何使用单个查询对从另一个表检索的表列表进行 UNION?

    我有一个表 其中包含 PostgreSQL 中的表列表 id table 1 table1 2 table2 3 table3 我想从所有这些表的联合中进行选择 例如 伪代码 select from union select table f
  • Web SQL 数据库 + Javascript 循环

    我正在尝试解决这个问题 但我自己似乎无法解决 我正在使用 Web SQL DB 但无法让循环正常使用它 I use for var i 0 i lt numberofArticles 1 i db transaction function
  • 如何在 SQL 选择查询中将行转换为 JSON?

    以下查询将整个表返回为单个 JSON 字符串 JSON 对象列表 每行一个 SELECT FROM MyTable FOR JSON AUTO 我需要返回多行 其中每行都是表中单行的 JSON 字符串 例如 如果表字段为 A B C 输出应
  • SQL Server 选择所需存储过程的查询帮助

    我正在努力解决在存储过程中构造 sql select 查询所需的逻辑 我的数据库使用股票市场数据 我有一个 2012 年交易日期表 一个股票代码表以及一个通过网络服务列出这些代码和交易日期的每日定价数据表 我正在尝试从我正在处理的选择查询中
  • 使用 ActiveRecord 和 Yii2 记录实际的 SQL 查询?

    我正在这样做 students Student find gt all return this gt render process array students gt students 然后在视图中 foreach students as

随机推荐

  • Ansible async_status 任务 - 错误:ansible_job_id“未定义变量”

    我有一个 3 节点 ubuntu 20 04 lts kvm kubernetes 集群 kvm host 也是 ubuntu 20 04 lts 我在 kvm 主机上运行了 playbook 我有以下库存摘录 nodes hosts se
  • 如何使用 Java 在屏幕上移动 Windows 窗口?

    我一直在考虑制作一个带有 GUI 的窗口管理器 可能是用 Java 编写的 但是 我正在努力找出移动不属于我的程序的窗口的最佳方法 到目前为止 我似乎应该使用 JNI 与 Windows API 进行交互 但我还没有找到任何有用的示例 有谁
  • 如何以编程方式跳过摩卡测试?

    我有一个代码 其中某些测试在 CI 环境中总是会失败 我想根据环境条件禁用它们 如何在运行时执行期间以编程方式跳过摩卡测试 您可以通过在描述或它块前面放置一个x来跳过测试 或者放置一个 skip在它之后 xit should work fu
  • 如何确定应用程序的控制台窗口何时获得或失去焦点?

    有没有一种简单的方法可以做到这一点 或者至少检查控制台当前是否处于焦点状态 想象一下像游戏这样的东西 这里不是这种情况 但类比成立 如果它可以自动暂停 那将会很有用 我需要类似的东西 如果您感兴趣的窗口不是控制台窗口 则只需点击适当的焦点事
  • 为什么不使用 HashSet 类来实现 Enumerable.Distinct

    我需要访问的渐近时间和空间复杂度IEnumerable Distinct用大O表示法 所以我正在研究扩展方法的实现Enumerable Distinct我看到它是使用内部类实现的Set
  • JList 文本对齐

    我有一个JList我想显示两个值的项目 有没有办法让它显示字符串名称 然后用右对齐的字符串来显示值 看起来像这样 Title 120 Title2 135 是否可以将两个字符串传递给一个项目 并使第一个字符串显示在左侧 第二个字符串显示在右
  • Windows 窗体 - 从按钮类型的对象获取文本值

    我有一个名为Form1并在此表单中命名为面板panel1 我仅使用该面板将按钮放置在那里 以便我可以将它们分组并与我的其他按钮分开使用它们Form1 为了我的程序的目的 我需要处理从内部按钮进行的 每个按钮单击panel1 为此 我使用相同
  • java applet 小程序的替代品是什么?

    我正在开发一个 Web 应用程序 其中我们有一个客户端小程序应用程序 它将检查客户端计算机上是否安装了证书 但大家都知道 Mozilla 很快就会停止支持小程序 谁能建议做同样事情的替代选择是什么 Java 网络启动 The 其他答案已过期
  • 为什么 Chrome 在反复刷新使用 WebAssembly 的页面后最终会抛出“内存不足:wasm 内存”?

    我愿意相信刷新浏览器窗口或选项卡不会泄漏 不幸的是 当涉及 WebAssembly 时 情况似乎并非如此 我用 Rust 构建了一个 WebAssembly 箱 该包的编译大小约为 360 Kb 内容压缩之前 并且该包在 Firefox 甚
  • 这是将训练集投影到特征空间的正确方法吗? MATLAB

    我使用以下方法计算了 PCA function signals V pca2 data M N size data data reshape data M N 1 subtract off the mean for each dimensi
  • 将文本在 div 中垂直和水平居中

    我正在使用 bootstrap 并尝试创建一个高度和宽度与其宿主容器相同的 Cell 标题占该空间的 30 值占该空间的 70 该值有上限和下限 各占 20 为实际值留出 60 的空间 HTML div class container fl
  • Excel VBA退出Word文档

    我有一个宏 可以将 Excel 文档的选定单元格插入到 Word 模板中 复制整个 Word 文档 然后关闭文档而不保存 以保留某些关键字 但是 当它关闭 Word 文档时 它会打开一个空白的 Word 窗口 其中没有活动文档 并且每次运行
  • Django 模板和 MongoDB _id

    Variables and attributes may not begin with underscores value id 如何引用 idDjango 模板中从 MongoDB 获取的项目的数量 自定义模板过滤器有助于 from dj
  • jquery:.css 与附加到头部之间的速度差异?

    我们对内部应用程序有一些笨拙的解决方法 我想知道哪种 jQuery css 技术被认为更快 更高效 等等 技术A使用 css doc css margin top 90px checkouthelp css margin 50px 50px
  • 了解 Python 中的 for 循环

    我正在尝试创建一个for循环 我遇到了问题 我不明白这些循环是如何工作的 我认为问题是因为我正在使用for语法错误 据我了解 一个for循环应该看起来像 for w in words print w len w But 它究竟是如何运作的
  • 将 PHP Unix 时间戳转换为 Javascript 时间戳格式

    我将 php 中的 unix 时间戳抛出到 javascript 中 我注意到 PHP 和 Javascript 时间戳与纪元不同 秒与毫秒 我基本上所做的就是回显 php unix 时间 然后添加 3 个零 简单地将其乘以 1000 但我
  • Excel UDF 到表中的数据块的逆透视(融化、反向透视、展平、标准化)

    这个问题将寻求多种方法LET LAMBDA VBA UDF and Power Query Function 因此不会有单一的正确答案 而是征集可供参考的方法 Scott提出了一个问题here关于反转包含数据块而不是单个数据点的复杂表 基本
  • 无法在 Angular 6 中添加 Bootstrap 4

    当我尝试添加最新的引导程序版本时遇到问题 npm install bootstrap 之后 当我尝试运行它时收到一条错误消息 ng serve open 我在 angular json 中添加 Bootstrap 像这样 styles no
  • Xamarin Forms PopAsync 崩溃

    我用 PCL 构建了一个 Xamarin 表单应用程序 应用程序有时会崩溃await Navigation PopAsync 我找到了这个https forums xamarin com discussion 62414 app resum
  • 通过分隔符将 T-SQL 字符串拆分为列?

    我有一个表 其中有一列使用连字符分隔的八个值集 其中一些为空白 我试图将此字符串拆分为列 每个值对应于分隔字符串的位置 Table1 Record StringValue rec1 422100 130 1034 10901 12000 r