sql - SQL:从存在多个分隔符的字符串中提取下一个字符
问题描述
Azure MSSQL 数据库
我有一列包含每个事务存储的值。该字符串最多可以包含 7 个值,以 . 分隔'-'
。
我需要能够提取在 3rd 之后存储的值'-'
。问题是此列的长度(以及 3rd 之前的字符'-'
)可能会有所不同。
例如:
DIM VALUE
1. NHL--WA-S-MOSG-SER-
2. VDS----HAST-SER-
3. ---D---SER
- 第1行需要返回
'S'
- 第2行需要返回
'-'
- 第3行需要返回
'D'
解决方案
这绝不是最佳解决方案,但它适用于 SQL Server。
为测试目的添加了 TempTable。也许它会提示您从哪里开始。
编辑:添加了对string_split函数的引用(从 SQL Server 2016 开始工作)。
CREATE TABLE #tempStrings (
VAL VARCHAR(30)
);
INSERT INTO #tempStrings VALUES ('NHL--WA-S-MOSG-SER-');
INSERT INTO #tempStrings VALUES ('VDS----HAST-SER-');
INSERT INTO #tempStrings VALUES ('---D---SER');
INSERT INTO #tempStrings VALUES ('A-V-D-C--SER');
SELECT
t.VAL,
CASE t.PART WHEN '' THEN '-' ELSE t.PART END AS PART
FROM
(SELECT
t.VAL,
ROW_NUMBER() OVER (PARTITION BY VAL ORDER BY (SELECT NULL)) AS IX,
value AS PART
FROM #tempStrings t
CROSS APPLY string_split(VAL, '-')) t
WHERE t.IX = 4; --DASH COUNT + 1
DROP TABLE #tempStrings;
输出是...
VAL PART
---D---SER D
A-V-D-C--SER C
NHL--WA-S-MOSG-SER- S
VDS----HAST-SER- -
推荐阅读
- algorithm - 如何改进我的“旋转(滚动/循环排列)阵列”解决方案?
- django - Postgresql 通过 sql 脚本更新,在后端获取通知
- css - MS Edge 上的 CSS 边框问题
- python - 您如何为实时系统实现 Python Gekko 应用程序?
- windows - Windows 10:将 Acrobat Reader 设置为批处理文件中的默认 PDF 阅读器
- android - 有没有办法通过来自服务器的 API 来监听 json 的变化?
- javascript - 在任何其他方法之前运行 for 循环中的第一个 fetch 方法
- sql - 使用 order by 更新查询
- c++ - 如何使用 g++ 安装“Seshat”
- java - 为什么我不能用 OpenJFX 和 Deeplearning4J 编译 maven?