Come posso utilizzare le classi di caratteri POSIX superiori e inferiori per cercare testo in MySQL?

dba.stackexchange https://dba.stackexchange.com/questions/2522

  •  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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top