Domanda

I sto paragonando alcuni dati CHAR in una clausola WHERE nella mia SQL come questo,

dove PRI_CODE

Il problema che sto avendo è quando i valori CHAR sono di diverse lunghezze. Quindi, se PRI_CODE = '0800' e PriCode = '20' sta tornando vero, invece di falso.

Sembra che sta confrontando in questo modo

'08' < '20' 

invece che come

'0800' < '20'

Fa un inizio confronto CHAR dalla sinistra fino a quando uno o gli altri valori finire?

Se sì, come posso risolvere questo problema?

I miei valori può avere lettere in esso in modo convering a numerico non è un'opzione.

È stato utile?

Soluzione

Non è il confronto '08' con '20', è, come ci si aspetta, a confronto '0800' con '20'.

Quello che non sembra aspettarsi, tuttavia, è che '0800' (la stringa) è davvero meno di '20' (la stringa).

Se la conversione in valori numerici per un confronto numerico è fuori questione, è possibile utilizzare la seguente funzione DB2:

right ('0000000000'||val,10)

che vi darà val imbottita sulla sinistra con zeri per una dimensione di 10 (ideale per una CHAR(10), per esempio). Quella volontà, almeno la garanzia che i campi sono della stessa dimensione e il confronto lavorerà per il vostro caso particolare. Ma vi esorto a ripensare a come si sta facendo le cose:. Per-fila funzioni raramente scala bene, le prestazioni-saggio

Se stai usando z / OS, si dovrebbe avere un paio di amministratori di database solo in giro sul pavimento sala computer in attesa di lavoro - probabilmente si può chiedere uno di loro per una consulenza più su misura per la vostra applicazione specifica: -)

Una cosa che viene in mente nell'uso di un inserto / aggiornamento grilletto e PRI_CODE_PADDED colonna secondaria per tenere la colonna PRI_CODE completamente riempito (utilizzando lo stesso metodo come sopra). Quindi assicurarsi che la variabile PriCode è simile formattato prima di eseguire il select ... where PR_CODE_PADDED < PriCode.

Incorrere che il costo al inserto / tempo di aggiornamento sarà ammortizzare sopra tutte le seleziona è molto probabile che fare (che, in quanto non sono più utilizzando le funzioni per-fila, sarà veloce come il fulmine), dando migliore performance complessiva (supponendo che il database non è uno di quei rari incredibilmente bestie che sono scritte più di lettura, ovviamente).

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