Diciamo che ho una tabella:SQL: Perché LIKE non funziona se viene utilizzata la classe di carattere [0-9]?
tabella corrente:
title_id title_name title_qty
1 A.I. Artificial Intelligence 2
2 Batman Begins 40
3 2012 7
4 101 Dalmatians 23
5 Act of Valor 1
6 Batman 50
7 20 Million Miles to Earth 340
Mi piacerebbe avere una potenza di:
output desiderato:
title_id title_name title_qty title_char
4 101 Dalmatians 23 #
7 20 Million Miles to Earth 340 #
3 2012 7 #
1 A.I. Artificial Intelligence 2 A
5 Act of Valor 1 A
6 Batman 50 B
2 Batman Begins 40 B
Basato su ciò che ho letto qui in Stack Overflow, il modo più veloce per fare chec K Se un personaggio è un numero è quello di utilizzare LIKE '[0-9]%' così mi si avvicinò con
Query:
SELECT *, CASO QUANDO SINISTRA (TITLE_NAME, 1) COME '[0-9]%' poi "#" ELSE SINISTRA (TITLE_NAME, 1) END come title_char dal titolo ORDER BY TITLE_NAME
uscita:
title_id title_name title_qty title_char
4 101 Dalmatians 23 1
7 20 Million Miles to Earth 340 2
3 2012 7 2
1 A.I. Artificial Intelligence 2 A
5 Act of Valor 1 A
6 Batman 50 B
2 Batman Begins 40 B
Come mostrato sopra, non funziona affatto. Ma se cambio il LIKE per abbinare una sola cifra, funziona:
SELECT *, CASO QUANDO SINISTRA (TITLE_NAME, 1) LIKE '1%' poi "#" ELSE SINISTRA (TITLE_NAME, 1) END come title_char dal titolo ORDER BY TITLE_NAME
title_id title_name title_qty title_char
4 101 Dalmatians 23 #
7 20 Million Miles to Earth 340 2
3 2012 7 2
1 A.I. Artificial Intelligence 2 A
5 Act of Valor 1 A
6 Batman 50 B
2 Batman Begins 40 B
inizialmente ho pensato che non funziona perché la mia domanda è un po 'complicato così ho fatto un semplice scegliere dove. Il LIKE viene aggiunto dopo il WHERE.
Nessuna uscita (quando non ci dovrebbero essere tre):
SELECT * FROM title WHERE title_name LIKE '[0-9]%' ORDER BY title_name
funziona come previsto:
SELECT * FROM title WHERE title_name LIKE '1%' ORDER BY title_name
SELECT * FROM title WHERE title_name LIKE '2%' ORDER BY title_name
Secondo la documentazione di SQL,
Un personaggio la classe "[...]" corrisponde a qualsiasi personaggio all'interno delle parentesi. Ad esempio, "[abc]" corrisponde a "a", "b" o "c". Per nominare un intervallo di caratteri , utilizzare un trattino. "[A-z]" corrisponde a qualsiasi lettera, mentre "[0-9]" corrisponde a qualsiasi cifra.
Qualcuno sa perché non funziona se si è utilizzata la classe di carattere [0-9]? Come principiante, per favore correggimi se sbaglio. Ma sono curioso del perché funzioni se uso LIKE '1%' o qualsiasi cifra mentre LIKE '[0-9]%' non darà alcun risultato? La documentazione dice che dovrebbe corrispondere a qualsiasi cifra, giusto? Se lanciarlo come numero intero è un requisito, non dovrebbe funzionare su tutti i miei test, giusto?Perché non l'ho lanciato prima di fare il confronto LIKE.
SQL violino:http://sqlfiddle.com/#!2/492906/7
Ho modificato la domanda ... Solo per aggiungere questa è la query che può produrre l'output corretto, ho usato RLIKE: SELECT *, CASE WHEN LEFT (title_name, 1) RLIKE '[0-9]' THEN "# "ELSE LEFT (title_name, 1) END come title_char FROM title ORDER BY title_name – bimspramirez
[La documentazione che citi] (http://dev.mysql.com/doc/refman/5.5/en/pattern-matching.html) riguarda 'RLIKE', non' LIKE', quindi mi sembra corretto. In altri dialetti SQL, '[...]' è accettato da 'LIKE', ma (apparentemente) non in MySQL. – hvd
Ciao hvd, grazie! – bimspramirez