regexp_substr connect by
时间: 2023-05-04 22:00:57 浏览: 155
b'regexp_substr connect by' 是一个 SQL 查询语句中的字符串表示法,其中 regexp_substr 和 connect by 是两个 SQL 关键字。regexp_substr 是用来在字符串中匹配子串的函数,而 connect by 是用来进行递归查询的关键字。这样的语句通常用于数据库中的层次结构查询。
相关问题
oracle regexp_substr 函数 和 CONNECT BY LEVEL的demo SQL
当然,我可以为您提供有关 Oracle `REGEXP_SUBSTR` 函数和 `CONNECT BY LEVEL` 的示例 SQL。
首先是 `REGEXP_SUBSTR` 函数。该函数用于从一个字符串中提取满足正则表达式模式的子字符串。以下是一个示例:
```sql
SELECT REGEXP_SUBSTR('Hello, World!', '[A-Za-z]+') AS result FROM dual;
```
在上面的示例中,我们使用了一个正则表达式模式 `[A-Za-z]+`,它匹配一个或多个连续的字母字符。函数将返回匹配到的第一个子字符串,即 "Hello"。
接下来是 `CONNECT BY LEVEL`。它是 Oracle 中用于生成连续数字序列的语句。这在处理树形结构或生成测试数据时非常有用。以下是一个示例:
```sql
SELECT LEVEL AS num FROM dual CONNECT BY LEVEL <= 5;
```
在上面的示例中,我们使用 `CONNECT BY LEVEL <= 5` 来生成一个从 1 到 5 的连续数字序列。结果将返回一个名为 "num" 的列,其中包含值 1 到 5。
希望以上示例能对您有所帮助!如果您还有其他问题,请随时提问。
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'。
阅读全文