我有两个专栏,内容如下:
| 还款_数量|还款_参照|
| - ------|- ------|
| 一百五十点零六至三千八百二十九点零七|第21季度第1 P-20210529期第21季度第20210428期|
| 一百六十点一二至一千六百五十至二千四百二十九点四九|第21号药品|
| 一百一十五点九至一百零四点二八至二千六百至一千四百六十一点四七|通21 JK 9 -20210731通21 JG 1 -20210731通21 QZP-20210724通21 YMG-20210628|Repay_Amount
具有由Unicode字符
分隔的一些量。Repay_Ref
也有一些用
分隔的值,但是,如果您注意到,每个单元格中的每个多值都以日期结尾。
我只想显示Repay_Ref
的日期和对应的Repay_Amount
金额。
我想要达到的是:
| 还款_数量|还款_参照|
| - ------|- ------|
| 一百五十点零六分|小行星20210529|
| 小行星3829.07|小行星20210428|
| 一百六十点一二分|小行星20210628|
| 小行星1650|小行星20210531|
| 小行星2429.49|小行星20210529|
| 一百一十五点九|小行星2021|
| 一○四点二八分|小行星2021|
| 小行星2600|小行星20210724|
| 小行星1461.47|小行星20210628|
我尝试了以下查询,但无法获得所需结果。存在重复。
SELECT REPAY_AMOUNT,
RA.Value AS [SPLIT_REPAY_AMOUNT],
RR.Value AS [SPLIT_REPAY_ref],
REPAY_ref
FROM InsightImport.dbo.AA_BILL_DETAILS bil
CROSS APPLY STRING_SPLIT(REPAY_AMOUNT, N'') RA
CROSS APPLY STRING_SPLIT(REPAY_ref, N'') RR
任何帮助都将不胜感激!
1条答案
按热度按时间cvxl0en21#
您需要一个拆分器函数,该函数返回每个子字符串的序号位置。从SQL Server 2022开始,
STRING_SPLIT()
支持可选的enable_ordinal
参数。对于早期版本,可以选择基于JSON的方法。其思想是将存储的文本转换为有效的JSON数组(
115.9104.2826001461.47
转换为["115.9","104.28","2600","1461.47"]
),并使用OPENJSON()
和默认方案解析此数组。结果是一个包含key
、value
和type
列的表,key
列保存指定数组中元素的索引。SQL服务器2022:
SQL Server 2016及更高版本: