Mysql
 sql >> Database >  >> RDS >> Mysql

Come combinare regex + UPDATE in MySQL per aggiungere uno spazio a FirstnameLastname

In primo luogo, la corrispondenza dei modelli utilizzando REGEXP non fa distinzione tra maiuscole e minuscole. Quindi devi usare BINARY.

Non sono sicuro che ci sia un modo migliore per farlo in MySQL, ma questo è uno. Esegui le seguenti query per ciascuno degli alfabeti dalla A alla Z. Ho fornito le query per A, B, C, D, E, Y e Z. Copia per tutti gli altri alfabeti. Dopo aver completato l'esecuzione di tutti, avrai uno spazio tra il nome e il cognome

UPDATE `wp_posts` 
SET `post_title` = TRIM(REPLACE(`post_title`, 'A', ' A'))
WHERE `post_title` REGEXP BINARY '[A]';

UPDATE `wp_posts` 
SET `post_title` = TRIM(REPLACE(`post_title`, 'B', ' B'))
WHERE `post_title` REGEXP BINARY '[B]';

UPDATE `wp_posts` 
SET `post_title` = TRIM(REPLACE(`post_title`, 'C', ' C'))
WHERE `post_title` REGEXP BINARY '[C]';

UPDATE `wp_posts` 
SET `post_title` = TRIM(REPLACE(`post_title`, 'D', ' D'))
WHERE `post_title` REGEXP BINARY '[D]';

UPDATE `wp_posts` 
SET `post_title` = TRIM(REPLACE(`post_title`, 'E', ' E'))
WHERE `post_title` REGEXP BINARY '[E]';

...
...

UPDATE `wp_posts` 
SET `post_title` = TRIM(REPLACE(`post_title`, 'Y', ' Y'))
WHERE `post_title` REGEXP BINARY '[Y]';

UPDATE `wp_posts` 
SET `post_title` = TRIM(REPLACE(`post_title`, 'Z', ' Z'))
WHERE `post_title` REGEXP BINARY '[Z]';

Si prega di notare l'utilizzo di BINARY negli esempi di query precedenti.

Un altro modo potrebbe essere scrivere uno script PHP per leggere tutti i post_title e quindi utilizzare potenti funzioni di espressione regolare PHP per aggiungere spazi e aggiornarli nuovamente al database.

Spero che questo aiuti!

MODIFICA :Oh! Ho dimenticato che il database ha anche voci con spazi e devono essere ignorate. Utilizza invece questa query:

UPDATE `wp_posts` 
SET `post_title` = TRIM(REPLACE(`post_title`, 'A', ' A'))
WHERE `post_title` REGEXP BINARY '[^ ][A]';