[英]MySQL - Query Returning Values Matching REGEX Patterns
我在MySQL數據庫中存儲了大表的自由格式文本字符串。 在每個這些字符串中,我必須找到三個經過專門格式化的子字符串。 這個問題看起來非常適合MySQL REGEXP模式匹配。
我知道MySQl REGEXP運算符僅返回True或False。 此外,因為我需要處理大型表,所以我需要在MySQL內實現目標,而不涉及PHP或任何其他服務器端語言。
源數據示例:
FirstEntry_somestring_202320047A_210991957_700443250_Lieferadresse:_modified string c/o Logistics, some address and another text
SecondEntry_hereisanothertext_210991957_text_202320047A_and_700443250_another text which does not have any predefined structure
ThirdEntry_700443250_210991957_202320047A_Lieferadresse:_here some address, Logistics, and some another text with address.
FourthEntry some very long text before numbers__202320047A-700443250-210991957-Lieferadresse:, another text with address and company name. None of this text has predefined structure
上面的示例是在MySQL表中存儲為TEXT數據類型的四個字符串。 它們沒有任何特定的結構。 但是我知道,每個記錄中的某處必須是三個數字,可以自由定界,但是它們具有特定的格式:
您能幫我怎樣獲得與上面文本中的Regex模式匹配的子字符串?
服務器運行在:
謝謝!
MariaDB 10.0.5(從2013年開始)實際上與MySQL相同,但是它包含完整的REGEXP。 它還具有REGEXP_REPLACE()
。
對於那些對此問題感興趣的人,我已經使用MySQL存儲過程開發了自己的解決方案。
我認為,這是StackOverflow上最有價值的解決方案,因為它提供了真正的解決方案。 與其他人相比,僅提供了模糊的想法:
-- Return REGEX Value
DELIMITER $$
DROP PROCEDURE IF EXISTS RETURNREGEX$$
CREATE PROCEDURE RETURNREGEX(IN strSentence VARCHAR(1024), IN regex_str VARCHAR(1024), IN length_str INT )
BEGIN
DECLARE index_str INT DEFAULT 0;
DECLARE match_str VARCHAR(1024) DEFAULT '';
DECLARE result BOOL DEFAULT FALSE;
REPEAT
-- Get substring with predefined length
SELECT SUBSTRING(strSentence, index_str, length_str) INTO match_str;
-- compare this substring agains REGEX to see if we have match
SELECT match_str REGEXP regex_str INTO result;
SET index_str = index_str + 1;
-- evaluate result (TRUE / FALSE)
UNTIL result OR index_str > length(strSentence)
END REPEAT;
IF result = TRUE THEN SELECT match_str;
ELSE SELECT NULL;
END IF;
END$$
DELIMITER ;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.