ฉันมีสถานการณ์ต่อไปนี้ ฉันต้อง substring นิพจน์ปกติจากคำอธิบายการใช้ MySQL รายละเอียด:
Lorem D9801 ipsum dolor sit amet
ตำแหน่งที่ D9801 คือ REGEXP คำอธิบายข้อความที่แข็งแกร่งทุกข้อความมีเนื้อหาที่แตกต่างกัน แต่ regexp ของฉันควรมีลักษณะดังนี้: REGEXP 'D [[::]]] {4}'
REGEXP มี "D" ที่จุดเริ่มต้นเสมอและ "xxxx" - 4 หลักที่ท้าย: Dxxxx
ฉันรู้ว่า REGEXP จะส่งกลับเฉพาะค่าจริง / เท็จ แต่ฉันจะสร้างคิวรีเพื่อส่งคืนเฉพาะค่า 'D9801' ได้อย่างไร
ฉันลองทำสิ่งนี้:
SELECT SUBSTRING (description, LOCATE(REGEXP 'D[[:digit:]]{4}', description), 5)
FROM (
SELECT "Lorem D9801 ipsum dolor sit amet" AS description
) temp
ฉันรู้ว่ามันผิดดังนั้นฉันลองทำสิ่งนี้:
SELECT
id,
SUM(description REGEXP 'D[[:digit:]]{4}') AS matches,
CASE
WHEN (SUM(description REGEXP 'D[[:digit:]]{4}') > 0) THEN
SUBSTRING(description, LOCATE( /*POSITION_OF_REGEXP_IN_DESC*/ , description), 5)
ELSE 'Brak schematu'
END AS show_substr FROM ps_description GROUP BY id;
แต่จะหาตำแหน่งของ regexp ได้อย่างไร?
ฉันได้ยินเกี่ยวกับ UDF แต่ไม่สามารถใช้งานได้ฉันใช้ OVH โฮสติ้ง