Saya memiliki situasi berikut. Saya harus mengurangi ekspresi reguler dari deskripsi menggunakan MySQL. Deskripsi:
Lorem D9801 ipsum dolor sit amet
Di mana D9801 adalah REGEXP. Setiap deskripsi teks yang kuat memiliki konten yang berbeda tetapi regexp saya akan terlihat seperti: REGEXP 'D [[: digit:]] {4}'
REGEXP selalu memiliki "D" di awal dan "xxxx" - 4 digit di akhir: Dxxxx
Saya tahu REGEXP hanya mengembalikan nilai true / false, tetapi bagaimana saya bisa membuat kueri untuk mengembalikan hanya nilai 'D9801'?
Saya mencoba sesuatu seperti ini:
SELECT SUBSTRING (description, LOCATE(REGEXP 'D[[:digit:]]{4}', description), 5)
FROM (
SELECT "Lorem D9801 ipsum dolor sit amet" AS description
) temp
Saya tahu itu salah, jadi saya coba dengan ini:
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;
Tetapi bagaimana cara menemukan posisi regexp?
Saya mendengar tentang UDF tetapi saya tidak dapat menggunakannya, saya menggunakan hosting OVH.
mysql
regular-expression
Marek Andrzejak
sumber
sumber
Jawaban:
Ini perlu menggunakan
LOCATE
danSUBSTRING
sintaks untuk mendapatkan informasi dari string. Sintaksis lokasi dasar yang Anda perlukan dijelaskan di sini .LOCATE (str pencarian, str, [posisi])
Sementara fungsi substring yang Anda butuhkan dijelaskan di sini
SUBSTRING (str, pos, len)
Cara yang lebih mudah untuk melihatnya adalah dengan menganggap substring sebagai SUBSTRING berikut (str FROM pos FOR len)
Sytax yang saya gunakan untuk mendapatkan kata kedua di bawah ini, saya mengambil keuntungan dari spasi yang terus-menerus di sekitar kata kedua yang Anda coba untuk mengekstrak.
sumber
Sayangnya, fungsi ekspresi reguler MySQL mengembalikan true, false, atau null tergantung apakah ekspresi itu ada atau tidak.
Trik dalam mempengaruhi perilaku yang diinginkan adalah untuk menentukan substring yang dimulai dengan karakter yang Anda pedulikan, memiliki panjang yang benar, dan diikuti oleh angka. Serangkaian fungsi substring_index digunakan untuk mengekstrak string ...
sumber