我正在使用Firebird 2.5,我有一個欄位(稱為識別符號),其中有混合的字母、數字和特殊字符。我想使用regex在一個新的列中只提取數字。我已經嘗試了下面的方法,但它沒有作業。
有什么辦法可以讓我在不使用存盤程序或執行塊的情況下使用regex實作這個目標嗎?
SELECT ORDER_ID,
ORDER_DATE,
SUBSTRING(IDENTIFIER FROM 1 TO 10) SIMILAR TO '^[0-9]{10}$' -- DESIRED EXTRACTION COLLUMN
FROM ORDERS
uj5u.com熱心網友回復:
在Firebird 2.5中你不能這樣做,至少在沒有UDF或(可選擇的)存盤程序的幫助下不能這樣做。我不知道第三方 UDF 是否提供正則運算式,所以你可能必須自己撰寫。
盡管如此,如果你的需求與你的問題中顯示的完全一樣,即只從一個字串中提取前10個字符,如果它們都是數字,那么你可以使用:
case
when IDENTIFIER similar to ' [[:DIGIT:]]{10}%'
then substring(IDENTIFIER from 1 for 10)
結束。
(作為旁證,位置性的SUBSTRING語法是from <start> for <length>,而不是from <start> to <end> )
在Firebird 3.0及以上版本中,你可以使用SUBSTRING(...SIMILAR ...)與一個SQL正則運算式模式。假設你想從一個字串的開頭提取10個數字,你可以這樣做:
substring(IDENTIFIER similar '#"[[: DIGIT:]]{10}#"%' escape '#')
#"限定了要提取的模式(其中#是在ESCAPE子句中指定的一個自定義轉義字符)。模式的其余部分必須與字串的其余部分相匹配,因此這里使用了%(在其他情況下,你可能需要在第一個#"之前也指定一個模式。
請看這個dbfiddle的例子。
uj5u.com熱心網友回復:
這在任何版本的Firebird中都是不可能的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/306833.html
標籤:
