2013-07-23 2 views
5

Ho un problema - Devo trovare ogni singola frase come AbC (piccola b, tra due lettere maiuscole). Per esempio una dichiarazione: Little John ha avuto un ProBlEm e ha bisogno di sapere come fare tHiS.Trovare una piccola lettera tra due lettere maiuscole - MySQL

Devo selezionare ProBlEm e tHiS (vedi, BlE e HiS, una lettera minuscola tra due capitali). Come posso selezionare questo?

+0

"Ogni singola frase" dove? Ovunque nel tuo database? – Jon

risposta

1

In MySQL è possibile utilizzare un binario (per garantire la sensibilità caso) espressione regolare per filtrare per quei record che contengono un tale modello:

WHERE my_column REGEXP BINARY '[[:upper:]][[:lower:]][[:upper:]]' 

Tuttavia, non è così semplice da estrarre le sottostringhe che corrispondono a tale modello da MySQL. Uno può utilizzare un UDF, ad es. lib_mysqludf_preg, ma è probabilmente un'attività più adatta per essere eseguita all'interno del livello dell'applicazione. In entrambi i casi, le espressioni regolari possono di nuovo aiutare a semplificare questo compito.

+0

Prestare attenzione a questo avviso dal [manuale mysql] (http://dev.mysql.com/doc/refman/5.7/en/regexp.html#operator_regexp): "Gli operatori REGEXP e RLIKE funzionano in modo byte-saggio , quindi non sono sicuri multi-byte e possono produrre risultati imprevisti con set di caratteri multi-byte. " – mabi

+0

La mia colpa, tutto funziona! GRAZIE! –

+0

Solo una letterale 'e' dovrebbe essere sufficiente. – mabi

0

In primo luogo si è divisa la stringa. Please refer this SO Question

e quindi cercare ogni parola retrive come

substring(word,2) LIKE '[A-Z]' COLLATE latin1_general_cs