Pregunta

Estoy comparando algunos datos CHAR en una cláusula where en mi sql como este,

donde PRI_CODE

El problema que estoy teniendo es cuando los valores CHAR son de diferentes longitudes. Así que si PRI_CODE = '0800' y PriCode = '20' se está volviendo realidad en lugar de falsa.

Parece que se está comparando como este

'08' < '20' 

en lugar de como

'0800' < '20'

¿Un inicio comparación CHAR desde la izquierda hasta la una o poner fin a los otros valores?

Si es así ¿cómo puedo solucionar esto?

Mis valores puede tener letras en tan convering a numérico no es una opción.

¿Fue útil?

Solución

No es la comparación de '08' con '20', que es, como se esperaba, la comparación de '0800' con '20'.

Lo que no parecen esperar, sin embargo, es que '0800' (la cadena) es de hecho menos de '20' (la cadena).

Si la conversión a valores numéricos para una comparación numérica está fuera de la cuestión, se puede utilizar la siguiente función de DB2:

right ('0000000000'||val,10)

que le dará val acolchada a la izquierda con ceros a un tamaño de 10 (ideal para un CHAR(10), por ejemplo). Esa voluntad al menos garantía de que los campos son del mismo tamaño y la comparación de trabajo para su caso particular. Pero te pido que replantearse cómo lo está haciendo cosas:.-Por fila funciones rara vez se escalan bien, en cuanto al rendimiento

Si está utilizando z / OS, debe tener un par de administradores de bases tirados por el suelo sala de ordenadores de espera para el trabajo - es probable que pueda pedir a uno de ellos para pedir consejo más adaptado a su aplicación específica: -)

Una cosa que viene a la mente en el uso de una inserción / actualización gatillo y PRI_CODE_PADDED columna secundaria para mantener la columna PRI_CODE totalmente acolchado out (utilizando el mismo método que el anterior). A continuación, asegúrese de que la variable de PriCode está formateado de manera similar antes de ejecutar el select ... where PR_CODE_PADDED < PriCode.

incurrir en ese costo al insertar / tiempo de actualización a su amortización sobre todas las selecciona es muy probable que hacer (que, debido a que ya no se están usando funciones por fila, será tan rápidos), que le da un mejor rendimiento global (asumiendo que su base de datos no es una de esas raras increíblemente bestias que se escriben más de lectura, por supuesto).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top