- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个表,其中有一列包含如下字符串:
/TYPE/BOOKING/IBAN/NL12BANK0003456789/BIC/BANKNL2A/NAME/Mr. A. Someguy/CODE/Codenumber 12345678/REF/NOTPROVIDED/LINE/ABCD EFG 234567890 1234 ETC
/TYPE/BOOKING/IBAN/NL34BANK000123456/BIC/BANKNL2U/NAME/Mr. A. Dinges/CODE/98765432/REF/NOTPROVIDED
我想在这些字符串中查找单个元素,而不必编写包含许多 CHARINDEX-es 和 SUBSTRINGS 的不可读代码。所以我找到了 SPLIT_STRING 函数。
select contract, [value]
from SCHEMA.PAYMENTS
CROSS APPLY STRING_SPLIT(paymentrow, '/')
这很好,但现在我在行中得到了这些值:
bookingnumber value
12-3-56789012-3
12-3-56789012-3 TYPE
12-3-56789012-3 BOOKING
12-3-56789012-3 IBAN
12-3-56789012-3 NL12BANK0003456789
12-3-56789012-3 BIC
12-3-56789012-3 BANKNL2A
12-3-56789012-3 NAME
12-3-56789012-3 Mr. A. Someguy
12-3-56789012-3 CODE
12-3-56789012-3 Codenumber 12345678
12-3-56789012-3 REF
12-3-56789012-3 NOTPROVIDED
12-3-56789012-3 LINE
12-3-56789012-3 ABCD EFG 234567890 1234 ETC
98-7-65431234-0
98-7-65431234-0 TYPE
98-7-65431234-0 BOOKING
98-7-65431234-0 IBAN
98-7-65431234-0 NL34BANK000123456
98-7-65431234-0 BIC
98-7-65431234-0 BANKNL2U
98-7-65431234-0 NAME
98-7-65431234-0 Mr. A. Dinges
98-7-65431234-0 CODE
98-7-65431234-0 98765432
98-7-65431234-0 REF
98-7-65431234-0 NOTPROVIDED
因此,作为最后一步,我将旋转值列,以便原始字符串中的元素显示为整齐的列,如下所示:
bookingnumber type IBAN BIC name code ref
12-3-56789012-3 BOOKING NL12BANK0003456789 BANKNL2A Mr. A. Someguy Codenumber 12345678 NOTPROVIDED
98-7-65431234-0 BOOKING NL34BANK0001234567 BANKNL2U Mr. A. Dinges 98765432 NOTPROVIDED
我一直在修补 PIVOT,但要么它不起作用,要么它没有给出正确的结果。
帮助将不胜感激。
最佳答案
您自己尝试调用 STRING_SPLIT()
证明您使用的是 v2016+。所以你可以调用 JSON 来拯救你:
(感谢 John Cappelletti 制作的模型)
Declare @YourTable table (Bookingnumber varchar(50),paymentrow varchar(max) )
Insert Into @YourTable values
('12-3-56789012-3','/TYPE/BOOKING/IBAN/NL12BANK0003456789/BIC/BANKNL2A/NAME/Mr. A. Someguy/CODE/Codenumber 12345678/REF/NOTPROVIDED/LINE/ABCD EFG 234567890 1234 ETC')
,('98-7-65431234-0','/TYPE/BOOKING/IBAN/NL34BANK000123456/BIC/BANKNL2U/NAME/Mr. A. Dinges/CODE/98765432/REF/NOTPROVIDED');
SELECT *
FROM @YourTable t
CROSS APPLY OPENJSON(CONCAT('[{',REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
t.paymentrow,'/TYPE/','"Type":"')
,'/IBAN/','","IBAN":"')
,'/BIC/','","BIC":"')
,'/NAME/','","Name":"')
,'/CODE/','","Code":"')
,'/REF/','","Ref":"')
,'/LINE/','","Line":"'),'"}]'))
WITH([Type] NVARCHAR(100)
,[IBAN] NVARCHAR(100)
,[BIC] NVARCHAR(100)
,[Name] NVARCHAR(250)
,[Code] NVARCHAR(100)
,[Ref] NVARCHAR(100)
,[Line] NVARCHAR(500)) A;
我们使用一些替换将您的字符串转换为这样的 JSON
[{"Type":"BOOKING",
"IBAN":"NL12BANK0003456789",
"BIC":"BANKNL2A",
"Name":"Mr. A. Someguy",
"Code":"Codenumber 12345678",
"Ref":"NOTPROVIDED",
"Line":"ABCD EFG 234567890 1234 ETC"}]
WITH
- 子句将隐式执行旋转。
使用固定的输入模式,这更容易
SELECT *
FROM @YourTable t
CROSS APPLY OPENJSON(CONCAT('[["',REPLACE(STUFF(t.paymentrow,1,1,''),'/','","'),'"]]'))
WITH([Type] NVARCHAR(100) '$[1]'
,[IBAN] NVARCHAR(100) '$[3]'
,[BIC] NVARCHAR(100) '$[5]'
,[Name] NVARCHAR(250) '$[7]'
,[Code] NVARCHAR(100) '$[9]'
,[Ref] NVARCHAR(100) '$[11]'
,[Line] NVARCHAR(500) '$[13]') A;
中间的 JSON 数组如下所示:
["TYPE","BOOKING","IBAN","NL12BANK0003456789","BIC","BANKNL2A","NAME","Mr. A. Someguy","CODE","Codenumber 12345678","REF","NOTPROVIDED","LINE","ABCD EFG 234567890 1234 ETC"]
关于sql-server - 旋转 SPLIT_STRING 的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58453478/
SQL、PL-SQL 和 T-SQL 之间有什么区别? 谁能解释一下这三者之间的区别,并提供每一个的相关使用场景? 最佳答案 SQL 是一种对集合进行操作的查询语言。 它或多或少是标准化的,几乎所有关
这个问题已经有答案了: What is the difference between SQL, PL-SQL and T-SQL? (6 个回答) 已关闭 9 年前。 我对 SQL 的了解足以完成我的
我在数据库中有一个 USER 表。该表有一个 RegistrationDate 列,该列有一个默认约束为 GETDATE()。 使用 LINQ 时,我没有为 RegistrationDate 列提供任
我有一个可能属于以下类型的字符串 string expected result 15-th-rp 15 15/12-rp 12 15-12-th
很难说出这里问的是什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或言辞激烈,无法以目前的形式合理回答。如需帮助澄清此问题以便可以重新打开,visit the help center . 9年前关闭
我有一个存储过程(称为 sprocGetArticles),它从文章表中返回文章列表。这个存储过程没有任何参数。 用户可以对每篇文章发表评论,我将这些评论存储在由文章 ID 链接的评论表中。 有什么方
我目前正在做一个 *cough*Oracle*cough* 数据库主题。讲师介绍embedded SQL作为让其他语言(例如 C、C++)与(Oracle)数据库交互的方式。 我自己做了一些数据库工作
SQL Server 中 SQL 语句的最大长度是多少?这个长度是否取决于 SQL Server 的版本? 例如,在 DECLARE @SQLStatement NVARCHAR(MAX) = N'S
这个问题已经有答案了: Simple way to transpose columns and rows in SQL? (9 个回答) 已关闭 8 年前。 CallType
预先感谢您对此提供的任何帮助。 假设我有一个查询,可以比较跨年的数据,从某个任意年份开始,永无止境(进入 future ),每年同一时期直到最后一个完整的月份(其特点是一月数据永远不会显示至 2 月
我在数据库中有一个 USER 表。该表有一个 RegistrationDate 列,该列的默认约束为 GETDATE()。 使用 LINQ 时,我没有为 RegistrationDate 列提供任何数
下面是我试图用来检查存储过程是否不存在然后创建过程的 sql。它会抛出一个错误:Incorrect syntax near the keyword 'PROCEDURE' IF NOT EXISTS
我有一个同事声称动态 SQL 在许多情况下比静态 SQL 执行得更快,所以我经常看到 DSQL 到处都是。除了明显的缺点,比如在运行之前无法检测到错误并且更难阅读,这是否准确?当我问他为什么一直使用
来自 lobodava 的动态 SQL 查询是: declare @sql nvarchar(4000) = N';with cteColumnts (ORDINAL_POSITION, CO
使用 SQL Server 中的存储过程执行动态 SQL 命令的现实优点和缺点是什么 EXEC (@SQL) 对比 EXEC SP_EXECUTESQL @SQL ? 最佳答案 sp_executes
我有这个有效的 SQL 查询: select sum(dbos.Points) as Points, dboseasons.Year from dbo.StatLines dbos i
我正在调试一些构建成功运行的 SQL 命令的代码。 然而,在查询结束时,查询结果似乎被写入了一个文本文件。 完整的查询如下 echo SELECT DATE,DATETABLE,DATE,APPDAT
我有一些创建表的 .sql 文件(MS SQL 数据库): 表_1.sql: IF OBJECT_ID (N'my_schema.table1', N'U') IS NOT NULL DROP TAB
我写了下面的 SQL 存储过程,它一直给我错误@pid = SELECT MAX(... 整个过程是: Alter PROCEDURE insert_partyco @pname varchar(20
我在 SQL Server 2005 中有包含两列 Fruit 和 Color 的表,如下所示 Fruit Colour Apple Red Orange
我是一名优秀的程序员,十分优秀!