Bir tablonun dize sütunundan bir sözcük çıkarmak istiyorum.mysql'deki REGEXP_SUBSTR karşılığı nedir?
description
===========================
abc order_id: 2 xxxx yyy aa
mmm order_id: 3 nn kk yw
Beklenen sonuç en fazla 100 satır sahip olan en
order_id
===========================
2
3
Tablo, metin uzunluğu ~ 256 char ve kolon, her zaman bir order_id
mevcut bulunmaktadır
Oracle'da bu sorun için REGEXP_SUBSTR
'u kullanabilirim. Bunu MySQL'de nasıl çözerim?
Ben sorunu çözmek için LOCATE kullanarak ve SUBSTR am 1
Düzen. Kod çirkin. Kodu yazdıktan on dakika sonra, böyle çirkin bir kod yazan adamı lanetliyorum.
REGEXP_SUBSTR işlevini MySQL belgelerinde bulamadım. Ama ben bunun var olduğunu umuyorum ..
Yanıt: Tablo neden optimize edilemiyor? Veriler neden bu kadar aptalca saklanıyor?
Verdiğim örnek, yalnızca çözmeye çalıştığım sorunu gösterir. Gerçek senaryoda, zaman uyumsuz görevleri yürütmek için bir DB tabanlı 3. parti kuyruk yazılımı kullanıyorum. Sıra, Ruby nesnesini metin olarak serileştirir. Tablo yapısı VEYA veri formatı üzerinde hiçbir kontrolüm yok. Sıradaki görevler yinelenebilir. Test kurulumumuzda, eski verilerden dolayı yinelenen görevlerden bazıları başarısız oluyor. Hatayı önlemek için bu görevleri silmem gerekiyor. Bu tür hatalar yaygın değildir, dolayısıyla normalize bir gölge tablosu korumak istemiyorum.
Yaptığım şey bu. Bunu yazmak için zaman ayırın +1 –
LENGTH() yerine CHAR_LENGTH() işlevini kullanmak için düzenlenmiş yanıt, ikincinin boyutu, dizenin uzunluğunu değil Bayt cinsinden döndürür. Örneğin, UTF8 ile sorun yaşayacaksınız –