MySQL sottostringa tra le due stringhe

Ho bisogno di una mano per risolvere un problema con il mio campo di colonna.
Ho bisogno di estrarre la stringa tra questi due diversi “modelli” di stringhe per esempio:

[…string] contratto= 1234567890123350566076070666 rilasciato= [string
…]

Voglio estrarre la stringa tra il ‘contratto=’ e ‘rilasciato=’

Al momento sto usando

SELECT substring(substring_index(licence_key,'contract=',-1),1,40) FROM table

Il problema è che questa stringa tra non avere sempre i 40 caratteri, quindi non è di lunghezza fissa e quindi i dati che viene prima e dopo. Si tratta di un volatile dei dati.

Non si sa come posso gestire questo?

InformationsquelleAutor Haohmaru | 2015-02-10



2 Replies
  1. 46

    Basta usare substring_index() due volte:

    SELECT substring_index(substring_index(licence_key, 'contract=', -1),
                           'issued=', 1)
    FROM table;
    • Che è intelligente, anzi… stavo cercando di eseguire la migrazione di un denormalizzati DB ver. 5.5 5.7 (sono un po ‘ scettico sul ver. 8). Era una colonna che ha una stringa json, ma per fortuna, la struttura di json è coerente in tutta la tabella. Questo mi ha salvato un sacco di CPU, non volevo ottenere tutti i dati in uno script e quindi inserire ogni riga nella nuova tabella.
    • BTW, io sono a conoscenza di json supporto a mySQL ver sopra 5.6. Io non vedo il punto di memorizzare JSON in un DB relazionale a meno di non avere altra scelta, o se non avete mai fare una ricerca nella colonna a ridurre la complessità del DB.
  2. 0

    Se questa stringa non corrisponde poi dare il risultato totale.

    Se si desidera sostituire quindi è possibile utilizzare come questa.

    UPDATE questions set question= REPLACE(question, '<xml></xml>', '') WHERE question like '%<xml>%';
    
    UPDATE questions set question= REPLACE(question, substring_index(substring_index(question, '<xml>', -1), '</xml>', 1), '') WHERE question like '%<xml>%';

Lascia un commento