簡體   English   中英

Oracle SQL - 如何 Select substring 索引內的另一個查詢?

[英]Oracle SQL - How to Select a substring index inside another Query?

我正在編寫一個從多個表返回一堆東西的查詢。 主要查詢針對 Table_1。 我需要從表 7 中的字段返回 substring。但我收到一個錯誤,即 Substring_Index 是無效標識符。 我怎樣才能達到預期的效果?

我有一個 TABLE_1 的字段 COLUMN_1 有 3+ 條數據,用“:”(空格冒號空格)分隔,我需要去掉第一個分隔符之前的文本,並返回它的 rest(不管長度)。


一個簡化的例子:

SELECT t1.name
    ,t1.address
    ,t1.phone
    ,t2. fave_brand
    ,SUBSTRING_INDEX(t3.fave_product, ' : ', -1) AS Fave Product
FROM table_1 t1
INNER JOIN table_2 t2
    ON t2.brand_SK = t1.fave_brand_FK
INNER JOIN table_3 t3
    ON t3.product_list_SK = t1.fave_products
WHERE <a series of constraints>;

請注意,我通常不是 SQL 開發人員,但后端開發人員正在休假,我的任務是拼湊此修復程序。 我充其量是個初學者。

Oracle 不支持substring_index() 那是 MySQL function。

您可以使用regexp_substr() 如果沒有樣本數據,很難 100% 確定,但我認為您想要的邏輯是:

regexp_substr(t3.fave_product, '[^:]+$') as fave_product

在 oracle 中,您可以使用regexp_replace()

regexp_replace(t3.fave_product, '^[^:]*:', '') "Fave Product"

regexp_replace()將字符串中與作為第二個參數給出的正則表達式匹配的部分替換為作為第三個參數給出的值。 在這里,我們使用空字符串作為第三個參數,這意味着字符串的匹配部分被抑制。

正則表達式分解:

 ^       beginning of the string
 [^:]*   as many characters as possible other than ":" (possibly, 0 characters)
 :       character ":"

注意:包含特殊字符(如空格)的標識符需要雙引號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM