使用SQL提取带有多个反斜杠的字符
我有一个字符串:使用SQL提取带有多个反斜杠的字符,sql,string,Sql,String,我有一个字符串: \_AAA\DDDD\09090\longtest 如何提取字符串09090? 将会有很多这样的字符串,我想提取第三个和第四个反斜杠之间的字符串。我会咬。下面是一个Oracle解决方案,它抓住了第三个领域的内容: select regexp_substr('\_AAA\DDDD\09090\longtest', '[^\]+', 1, 3) from dual; 从技术上讲,它获取与反斜杠不匹配的字符集的第三个匹配项 我刚刚意识到它不允许空字段 这项工作: select
\_AAA\DDDD\09090\longtest
如何提取字符串09090?
将会有很多这样的字符串,我想提取第三个和第四个反斜杠之间的字符串。我会咬。下面是一个Oracle解决方案,它抓住了第三个领域的内容:
select regexp_substr('\_AAA\DDDD\09090\longtest', '[^\]+', 1, 3) from dual;
从技术上讲,它获取与反斜杠不匹配的字符集的第三个匹配项
我刚刚意识到它不允许空字段
这项工作:
select nvl(regexp_substr( str, '([^\\]*)\\{0,1}', 1, level, 'i', 1 ), 'null') part
from ( select '\_AAA\DDDD\09090\longtest' str from dual )
where level = 4
connect by level <= regexp_count( str, '\' ) + 1;
从这里开始:
SQL Server的一个简单但不一定高效的解决方案是:
SELECT Substring(text, first, second - first)
FROM (SELECT text,
Charindex('\', text, Charindex('\', text, Charindex('\', text)+1)
+1)
+ 1 first,
Charindex('\', text, Charindex('\', text, Charindex('\', text,
Charindex
('\',
text)+1)+1)
+ 1) second
FROM table1)T
请参见有关的工作示例
编辑
更好的答案是使用递归查询
试着这样做:
WITH A
AS (SELECT CAST(0 AS BIGINT) AS idx1,
CHARINDEX('\', TEXT) idx2,
TEXT,
0 AS rn
FROM TABLE1
UNION ALL
SELECT CAST(IDX2 + 1 AS BIGINT),
CHARINDEX('\', TEXT, IDX2 + 1),
TEXT,
RN + 1
FROM A
WHERE IDX2 > 0)
SELECT SUBSTRING(TEXT, IDX1, IDX2 - IDX1)
FROM A
WHERE RN = 3
它更好,因为您可以轻松地调整它以提取字符串的任何部分,而不仅仅是第三部分
参见3个问题上的工作示例:每组\之间的文本是相同长度还是可变长度?第四个总是最后一个吗?最后,什么是RDBMS?所有的SQL都不一样。你的RDBMS是什么?您想要纯SQL的解决方案,还是可以,比如说,C?