Domanda

Ho un campo VARCHAR in una tabella Firebird 2.0 che può contenere caratteri alfanumerici. Devo ordinare i dati in questo campo, ordinando tutti i valori che contengono solo numeri come numeri e ordinando tutti gli altri valori come 0.

Ad esempio, se ho quattro valori,

"1", "2", "10", "string", 

Devo ordinarlo come

"string", "1", "2", "10". 

Ordinamento predefinito con ordinamenti di stringhe come

"1", "10", "2", "string".

Stavo pensando di trasmettere i valori a INTEGER, ma sto riscontrando un errore di conversione sulle stringhe, il che è ovviamente corretto. Come aggirare questo?

È stato utile?

Soluzione

È possibile utilizzare la funzione incorporata LPAD:

SELECT
  ...
  <number_field>,
  ...
FROM
  ...
ORDER BY
  LPAD(<numer_field>, 10)

Altri suggerimenti

Crea una colonna aggiuntiva in cui archiviare i valori ordinabili utilizzando l'applicazione. Quindi eseguire l'ordinamento in base a quella colonna. Se vuoi che i tuoi numeri siano alla fine, inserisci " ZZZ " (o " & # 220; & # 220; & # 220; " o qualunque sia l'ultimo carattere nella tua lingua) davanti ai numeri. Formato simile (" ZZZ% 012d " ;, my_num);

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top