Come posso utilizzare le classi di caratteri POSIX superiori e inferiori per cercare testo in MySQL?
-
16-10-2019 - |
Domanda
Vorrei cercare un corpo di testo per scoprire quando una parola specifica è stata superiore con carter. MySQL ha una funzione REGEXP con la classe di caratteri POSIX [[: upper:]]., Ma per la vita di me non riesco a farlo prodotto risultati
dire che voglio cercare una colonna per il letterale stringa 'LIBERO' solo in maiuscolo.
Diciamo che la struttura della tabella è qualcosa di simile:
CREATE TABLE article_body (
id INT NOT NULL AUTO_INCREMENT,
article_id INT NOT NULL,
summary VARCHAR(255),
body_text TEXT,
PRIMARY KEY(id));
Vorrei trovare colonne body_text dove la parola FREE è in tutte le lettere maiuscole, per esempio.
SELECT id, summary FROM article_body WHERE body_text REGEXP '[[:upper:]]+FREE';
Ma, naturalmente, che la sintassi non è valida.
Aiuto?
Soluzione
Dall'articolo su mysql REGEXP :
REGEXP non è case sensitive, tranne quando viene utilizzato con stringhe binarie.
Una soluzione semplice sarebbe quella di utilizzare il BINARIO operatore:
SELECT * FROM article_body WHERE body_text REGEXP BINARY "FREE";
Per quanto riguarda il motivo per cui il tuo esempio non funziona, il modo in cui io interpreto è "Ogni stringa con una o più lettera maiuscola seguita da FREE", ma naturalmente GRATIS c'è maiuscole e minuscole.