Questione : Fascicolazione di abitudine di MYSQL

Voglio fare un sort

I ho questo

TMP123
A1-1
A10-1
A1-3
A20-1
A20-2
A2-1

Is della lista esso possibile fascicolare sempre nelle misure di MYSQL
A1-1
A1-3
A2-1
A10-1
A20-1
A20-2
TMP123

Format in questo:
(carbone x 1 - 3) (x1 NUMERICO - 3) “-„ idee del

Any?
class= del

Risposta : Fascicolazione di abitudine di MYSQL

[caso quando instr (t, “-„) > 0 allora lunghezze altre del instr (t, “-„) (estremità t)+1]
InStr () li trova la posizione del precipitare, ma se non esiste, finge là è uno all'estremità della stringa.
Il risultato di questo si aggiunge come colonna nella sottointerrogazione per riferirsi a continuamente.

[caso
  quando il regexp del substr (t, 2.1) “[0-9]„ allora ha andato (t, 1)
  quando il regexp del substr (t, 3.1) “[0-9]„ allora ha andato (t, 2)
  parte di sinistra altra (t, 3) estremità]
Controlli per blocchi questo per vedere se la seconda lettera è [0-9], se è, restituisce la prima lettera come il ramo.
Se non è, continua a controllare la terza lettera.  Se il terzo è, i primi due fanno il ramo.
Altrimenti, le prime 3 lettere compongono il ramo.

[caso
  quando regexp del substr (t, 2.1) “[0-9]„ allora fuso (substr (t, 2, i-2) come FIRMATO)
  quando regexp del substr (t, 3.1) “[0-9]„ allora fuso (substr (t, 3, i-3) come FIRMATO)
  quando estremità allora fusa del regexp del substr (t, 4.1) “[0-9]„ (substr (t, 4, i-4) come FIRMATO)]
GETTO (. come FIRMATO) è un senso trasformare una colonna/espressione in un numero. Anche se generate le colonne come int, non potete lanciare al int. Mezzi FIRMATI un int che è soltanto positivo.  Ciò è richiesta perché il substr (parte di una stringa) è un tipo della stringa, che ordinerebbe “1„ prima “di 20„ lessicografico.
il regexp è una forma più avanzata COME di corrispondenza. Le espressioni normali è complesse in sé, ma bastano conoscere le prove “del regexp “[0-9]„ “se la stringa contiene una cifra.  Poiché stiamo verificando un singolo carattere, controlla se quel singolo carattere È una cifra.
La prova per la seconda parte è quasi la stessa della prova per il ramo.
Se il secondo è cifra, comincia dalla posizione 2, 3rd-> la posizione 3, 4th->pos 4.
Sapendo dove il numero della cremagliera comincia, prendiamo altretanti caratteri secondo le esigenze della sottrazione della posizione di inizio dalla posizione del precipitare (i-2, i-3, i-4).

[getto (substr (t, i+1, lunghezza (t)) come FIRMATO)]
L'ultima parte è trovata iniziando una posizione dopo il precipitare al resto di stringa.

Questi sono utilizzati direttamente nell'ordine vicino, ma potete utilizzarli nel prescelto pure o nella dichiarazione dell'aggiornamento.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
selezionare *
da
(
selezionare *,
 caso
  quando il regexp del substr (t, 2.1) “[0-9]„ allora ha andato (t, 1)
  quando il regexp del substr (t, 3.1) “[0-9]„ allora ha andato (t, 2)
  parte di sinistra altra (t, 3) ramo dell'estremità,
 caso
  quando regexp del substr (t, 2.1) “[0-9]„ allora fuso (substr (t, 2, i-2) come FIRMATO)
  quando regexp del substr (t, 3.1) “[0-9]„ allora fuso (substr (t, 3, i-3) come FIRMATO)
  quando cremagliera allora fusa dell'estremità del regexp del substr (t, 4.1) “[0-9]„ (substr (t, 4, i-4) come FIRMATO),
 lanciare (substr (t, i+1, lunghezza (t)) come FIRMATO) il livello
da
(
selezionare la t, caso quando instr (t, “-„) > 0 allora lunghezze altre del instr (t, “-„) (estremità t)+1 come i
da customsort
) QUADRATO
) SQ2
ordine vicino
ramo, cremagliera, livello
Altre soluzioni  
 
programming4us programming4us