簡體   English   中英

如何僅在Oracle SQL中選擇特定長度的子字符串

[英]How to Select a substring in Oracle SQL for specific length only

我在列中有以下值

  • Q6wabc89WmrtUX2pNYRnwjInCAT9ZxvaY7N7KAG440360130
  • Q6wabc89WmrtUX2pNYRnwwjInCAT9ZxvaY7N7KAG4a403648jInCAT9ZxvaY7N7KwjInCAT9ZxvaY7N7AG4403601AGd4s197

第一個值的長度是48。

第二個值的長度是97。

現在的條件是,如果長度為任何值的97,則僅使用前48個字符,否則使用已有的字符。

SUBSTR函數已經在那里

SELECT SUBSTR(CLNT_ID,0,48) FROM CLNT; 

這很好,現在我只想在值的長度等於97的情況下使用它。

此Select語句是一個存儲過程的一部分。 請協助為此確定正確的查詢。 提前致謝

SELECT 
case 
  when regexp_like (CLNT_ID , '^[[:alnum:]]{97}$') 
  then SUBSTR(CLNT_ID,0,48) 
  else null 
end label1, CLNT_ID
FROM CLNT;

我認為最簡單的方法是使用length()

select (case when length(clnt_id) = 97
             then substr(clnt_id, 1, 48)
             else clnt_id
        end)
from clnt;

這似乎是邏輯的最簡單實現。 另請注意, substr()的第二個參數從“ 1”開始計數,而不是從“ 0”開始計數,因此應在此處使用“ 1”(效果是相同的)。

您也可以這樣嘗試

SELECT CASE SIGN( LENGTH(:p_text) - 97 )
            WHEN -1 THEN
                :p_text
            ELSE
                SUBSTR(:p_text, 1, 48)
       END
  FROM dual;

暫無
暫無

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

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