SELECT REGEXP_SUBSTR
时间: 2023-08-06 11:05:36 浏览: 118
这是一个IT类问题。`REGEXP_SUBSTR`是一个SQL函数,用于从字符串中提取满足正则表达式模式的子字符串。它的语法如下:
`REGEXP_SUBSTR(string, pattern, position, occurrence, flags)`
- `string` 是要从中提取子字符串的源字符串。
- `pattern` 是一个正则表达式模式,用于匹配要提取的子字符串。
- `position` 是一个可选参数,指定在源字符串中开始搜索的位置,默认为1。
- `occurrence` 是一个可选参数,指定要提取的子字符串在源字符串中出现的次数,默认为1。
- `flags` 是一个可选参数,用于指定正则表达式的标志,如大小写敏感、多行模式等。
此函数返回满足正则表达式模式的第一个子字符串。如果未找到匹配项,则返回空字符串。
相关问题
WITH SPECIAL_HANDLING_AIRLINE as (select regexp_substr(str, '[^,]+', 1, LEVEL) from (select AP.PARAMETER_VALUE str from FM_APPLICATION_PARAMETERS AP WHERE PARAMETER_CODE='TONNAGE_SPECIAL_HANDLING_AIRLINE') CONNECT BY LEVEL <= regexp_count(str, ',') + 1), SPECIAL_REVENUE_TYPE as (select regexp_substr(str, '[^,]+', 1, LEVEL) from (select AP.PARAMETER_VALUE str from FM_APPLICATION_PARAMETERS AP WHERE PARAMETER_CODE='TONNAGE_SPECIAL_REVENUE_TYPE') CONNECT BY LEVEL <= regexp_count(str, ',') + 1), SPECIAL_SHIPMENT_FLOW_TYPE as (select regexp_substr(str, '[^,]+', 1, LEVEL) from (select AP.PARAMETER_VALUE str from FM_APPLICATION_PARAMETERS AP WHERE PARAMETER_CODE='TONNAGE_SPECIAL_SHIPMENT_FLOW_TYPE') CONNECT BY LEVEL <= regexp_count(str, ',') + 1), SPECIAL_HANDLING_EFF_DATE as ( SELECT TO_DATE(PARAMETER_VALUE, 'YYYYMMDD') EFF_DATE from FM_APPLICATION_PARAMETERS where PARAMETER_CODE='TONNAGE_SPECIAL_HANDLING_EFFECTIVE_DATE' ) select * from SPECIAL_HANDLING_AIRLINE;以上是oracle的写法,请转换成spark SQL的写法。
以下是将Oracle SQL转换成Spark SQL的代码:
```
WITH SPECIAL_HANDLING_AIRLINE AS (
SELECT split(PARAMETER_VALUE, ',')[pos] FROM (
SELECT PARAMETER_VALUE, posexplode(split(PARAMETER_VALUE, ','))
FROM FM_APPLICATION_PARAMETERS
WHERE PARAMETER_CODE = 'TONNAGE_SPECIAL_HANDLING_AIRLINE'
)
),
SPECIAL_REVENUE_TYPE AS (
SELECT split(PARAMETER_VALUE, ',')[pos] FROM (
SELECT PARAMETER_VALUE, posexplode(split(PARAMETER_VALUE, ','))
FROM FM_APPLICATION_PARAMETERS
WHERE PARAMETER_CODE = 'TONNAGE_SPECIAL_REVENUE_TYPE'
)
),
SPECIAL_SHIPMENT_FLOW_TYPE AS (
SELECT split(PARAMETER_VALUE, ',')[pos] FROM (
SELECT PARAMETER_VALUE, posexplode(split(PARAMETER_VALUE, ','))
FROM FM_APPLICATION_PARAMETERS
WHERE PARAMETER_CODE = 'TONNAGE_SPECIAL_SHIPMENT_FLOW_TYPE'
)
),
SPECIAL_HANDLING_EFF_DATE AS (
SELECT to_date(PARAMETER_VALUE, 'yyyyMMdd') AS EFF_DATE
FROM FM_APPLICATION_PARAMETERS
WHERE PARAMETER_CODE = 'TONNAGE_SPECIAL_HANDLING_EFFECTIVE_DATE'
)
SELECT * FROM SPECIAL_HANDLING_AIRLINE;
```
注意:Spark SQL不支持Oracle SQL的所有函数和语法,因此需要根据具体情况进行转换。在这个例子中,我们使用了split函数和posexplode函数来实现Oracle SQL的regexp_substr函数和CONNECT BY LEVEL子句。同时,我们将to_date函数的格式参数从'YYYYMMDD'改为'yyyyMMdd'。
SELECT REGEXP_SUBSTR(kmh, '[^,]+', 1, rownum) kmh from (select * from bysit.mspub_subject_month_Ope_conf where xh = i.xh) connect by rownum <= --connect by 递归 LENGTH(kmh) - LENGTH(regexp_replace(kmh, ',', '')) + 1)是什么意思
这段 SQL 查询语句的意思是从表 `bysit.mspub_subject_month_Ope_conf` 中选择所有满足条件 `xh = i.xh` 的记录,并将字段 `kmh` 按照逗号进行分割,然后逐条返回分割后的结果。
具体来说,`REGEXP_SUBSTR(kmh, '[^,]+', 1, rownum)` 这部分使用正则表达式将字段 `kmh` 按照逗号进行分割,并返回分割后的结果。`CONNECT BY` 语句用于实现递归操作,`ROWNUM` 是 Oracle 数据库的伪列,代表当前行的序号。
整个查询语句的目的是将字段 `kmh` 中的数据按照逗号分隔后逐条返回。
阅读全文