2012-05-28 57 views
10

Tengo un campo de tipo DATE de DB2 en una tabla de DB2. Quiero seleccionar datos por un filtro de fecha. Por ejemplo:Comparación de fechas de DB2

SELECT * 
FROM table 
WHERE registrationdate > '2002-10-01'; 

A partir de la consulta anterior, consigo registros con registrationdate partir de '10/01/1943', pero esto es incorrecto.

Estos no funcionan bien:

registrationdate > date('2002-10-01') 
date(registrationdate) > date('2002-10-01') 
date(registrationdate) > '2002-10-01' 

¿Cómo necesidad de comparar las fechas?

+1

¿Cómo se define la columna "registrationdate"? Tal vez el tipo de datos de la columna no sea una fecha, si lo fuera, entonces su consulta original debería haber funcionado. – NealB

Respuesta

3

exploré algunos otros problemas con la base de datos, después de reiniciar empezó para trabajar, entonces esto funciona correctamente ahora:

registrationdate > '2002-10-01' 
13

El formato estándar SQL para una fecha literal es:

DATE '2002-10-01' 

Por lo menos, vale la pena probar:

SELECT * 
    FROM table 
WHERE registrationdate > DATE '2002-10-01'; 
+0

si registrationdate se define como timestamp, simplemente diga timestamp'2012-12-21 ' – fedvasu

0

Utilice este formato.

registrationdate > 'mm/dd/yyyy' 
+0

Suponiendo que 'registrationDate' _es_ un tipo de fecha, cambiar el formato no tendrá efecto. Si se trata de algo así como un tipo de carácter, esto ** no funcionará EN ABSOLUTO ** - el formato que ha elegido no se ordena bien. ISO es el formato estándar recomendado por una razón. –

3

El formato predeterminado que se utiliza para fechas se determina por el código de territorio de la base de datos DB2 (que puede especificarse en el momento de la creación de bases de datos). Por ejemplo, mi base de datos se creó usando territorio = EE. UU. Por lo tanto, el formato de fecha tiene el siguiente aspecto:

values current date 
1 
---------- 
05/30/2003 

1 record(s) selected. 

Puede obtener el código de territorio de DB CFG.

db2 get db cfg | egrep 'code|territory' 
Database territory          = US 
Database code page          = 1208 
Database code set          = UTF-8 
Database country/region code       = 1 

Es decir, el formato es MM/DD/AAAA. Si desea cambiar el formato, puede vincular la colección de paquetes de utilidad db2 para usar un formato de fecha diferente.

para obtener la corriente fecha, la hora y la fecha y hora utilizando SQL, (básicamente le da una idea de lo que el formato de la fecha es) hacen referencia a los registros de DB2 adecuados: El sysibm.sysdummy1 tabla es un especial en memoria tabla que se puede utilizar para descubrir el valor de DB2 registra

db2 "SELECT current date FROM sysibm.sysdummy1 " 

1 
---------- 
06/02/2014 

    1 record(s) selected. 

la función FECHA sigue funcionando incluso si dejamos a un lado las citas en la función, pero el resultado no es correcto:

db2 "SELECT date(2001-09-22) FROM sysibm.sysdummy1 " 

1 
---------- 
05/24/0006 

    1 record(s) selected. 

Cuando la función DATE obtiene una cadena de caracteres como entrada, asume que es una representación de caracteres válida de una fecha de DB2 y la convierte en consecuencia. Por el contrario, cuando la entrada es numérica, la función asume que representa el número de días menos uno desde el comienzo de la era actual (es decir, 0001-01-01). En la consulta anterior, la entrada fue 2001-09-22, que es igual a (2001-9) -22, que equivale a 1970 días.

Y si todo lo anterior es aplicable, el siguiente comando debería funcionar bien para su problema.

SELECT * FROM table WHERE registrationdate > '10/01/2002';

Cuestiones relacionadas