如何通过 substr-instr 从特定位置获取特定值
How to get specific value from specific position by substr-instr
我有一些像 'abc-type-bank-20200112-1578796204118.csv'
这样的文件名
如果我按 '-'
.
剪切字符串,我想从上面获取值 'bank'
,即 第三个值
如果我的文件名像 abc-type-XYZ-20200112-1578796204118.csv
,我应该从第 3 个位置得到 'XYZ'
。
我试图通过下面的代码获取,但它给出了错误的值。
select substr(v_FILE_NAME,1,instr(v_FILE_NAME, '-') + 3) as name from (
select 'abc-type-bank-20200112-1578796204118.csv' as v_FILE_NAME from dual);
建议使用dual oracle。在该数据库中,您可以使用 regexp_substr()
:
select regexp_substr(filename, '[^-]+', 1, 3)
from (select 'abc-type-XYZ-20200112-1578796204118.csv' as filename from dual) x;
要使用 SUBSTR 和 INSTR 提取您想要的子字符串,您需要做类似的事情
WITH cteData AS (SELECT 'abc-type-bank-20200112-1578796204118.csv' AS FILENAME FROM DUAL),
ctePos AS (SELECT FILENAME,
INSTR(FILENAME, '-', 1, 2) AS DASH_2_POS,
INSTR(FILENAME, '-', 1, 3) AS DASH_3_POS
FROM cteData)
SELECT SUBSTR(FILENAME, DASH_2_POS + 1, DASH_3_POS - DASH_2_POS - 1) AS SUBSTR_3
FROM ctePos
上面将从示例数据中提取子字符串'bank'
。
我有一些像 'abc-type-bank-20200112-1578796204118.csv'
这样的文件名
如果我按 '-'
.
剪切字符串,我想从上面获取值 'bank'
,即 第三个值
如果我的文件名像 abc-type-XYZ-20200112-1578796204118.csv
,我应该从第 3 个位置得到 'XYZ'
。
我试图通过下面的代码获取,但它给出了错误的值。
select substr(v_FILE_NAME,1,instr(v_FILE_NAME, '-') + 3) as name from (
select 'abc-type-bank-20200112-1578796204118.csv' as v_FILE_NAME from dual);
建议使用dual oracle。在该数据库中,您可以使用 regexp_substr()
:
select regexp_substr(filename, '[^-]+', 1, 3)
from (select 'abc-type-XYZ-20200112-1578796204118.csv' as filename from dual) x;
要使用 SUBSTR 和 INSTR 提取您想要的子字符串,您需要做类似的事情
WITH cteData AS (SELECT 'abc-type-bank-20200112-1578796204118.csv' AS FILENAME FROM DUAL),
ctePos AS (SELECT FILENAME,
INSTR(FILENAME, '-', 1, 2) AS DASH_2_POS,
INSTR(FILENAME, '-', 1, 3) AS DASH_3_POS
FROM cteData)
SELECT SUBSTR(FILENAME, DASH_2_POS + 1, DASH_3_POS - DASH_2_POS - 1) AS SUBSTR_3
FROM ctePos
上面将从示例数据中提取子字符串'bank'
。