0
我需要編寫一些SQL來解析任何給定字符串的第二個單詞,或者如果沒有空格,整個字符串。解析字符串中的第二個字,在Oracle中
的邏輯是
'XXX YYYYY ZZZZZ' 將返回YYYY,
'XXX YYY' 將返回YYY和
'XXXXXX' 將返回XXXXXX。
有什麼建議嗎?有沒有使用SUBSTR和字符串中的2個位置的方法?而是使用長度。
非常感謝
我需要編寫一些SQL來解析任何給定字符串的第二個單詞,或者如果沒有空格,整個字符串。解析字符串中的第二個字,在Oracle中
的邏輯是
'XXX YYYYY ZZZZZ' 將返回YYYY,
'XXX YYY' 將返回YYY和
'XXXXXX' 將返回XXXXXX。
有什麼建議嗎?有沒有使用SUBSTR和字符串中的2個位置的方法?而是使用長度。
非常感謝
case
-- at least two words
when instr(c, ' ', 1, 1) > 0 then
case
-- at least three words
when instr(c, ' ', 1, 2) > 0 then
-- return text between first and last space
substr(
c
, instr(c, ' ', 1, 1)+1
, instr(c, ' ', 1, 2) - instr(c, ' ', 1, 1) - 1
)
else
-- return 2nd word (text after first space)
substr(c, instr(c, ' ', 1, 1)+1)
end
-- one word, return it
else c
end
這可能是,如果你知道有關正則表達式稍微簡單:
SELECT CASE WHEN REGEXP_COUNT('STRING', ' ') > 0 THEN
REGEXP_SUBSTR ('STRING', '(\s)(\S*)',1,1)
ELSE
'STRING'
END
FROM DUAL
利用了「INSTR的(C, '',1,2) - instr(c,'',1,1) - 1「邏輯。 謝謝你。 – fras85 2010-02-25 12:41:39
這是一個麻煩,這是肯定的。在MySQL中,我可能會使用'SUBSTRING_INDEX()'函數,這會使其不那麼混亂。 – 2010-02-25 13:54:28
這可能很麻煩,但在Oracle中,您將自己的邏輯放在自己的實用程序包中,並且您隨時都可以使用它。 – Rene 2010-03-01 07:18:02