Necesito para obtener todos los registros de fecha superior de 01/01/2015. Esta consulta no funciona desde el nt.valeur de tipo de datos varchar(255). No puedo cambiar la estructura de la entidad NotifTypeActionChampAddValVO .
El servidor de base de datos está en una versión de db2 9.7.

Aquí es el hql:

select nt.valeur from NotifTypeActionChampAddValVO  nt where nt.valide = 1  and nt.typeActionChampAdditionnelValue.champAdditionnel.id = 123  and cast(nt.valeur as date) = '01/01/2015')

He intentado por fundición fundición(nt.valeur como la fecha), pero se genera una excepción.

aquí es la excepción

DIAVERUM 2015-01-23 13:23:21,859 [http-8081-7] ERROR org.hibernate.util.JDBCExceptionReporter  - DB2 SQL Error: SQLCODE=-461, SQLSTATE=42846, SQLERRMC=SYSIBM.LONG VARCHAR;SYSIBM.DATE, DRIVER=3.63.75
DIAVERUM 2015-01-23 13:23:21,859 [http-8081-7] ERROR org.hibernate.util.JDBCExceptionReporter  - DB2 SQL Error: SQLCODE=-727, SQLSTATE=56098, SQLERRMC=2;-461;42846;SYSIBM.LONG VARCHAR|SYSIBM.DATE, DRIVER=3.63.75

Cómo puedo emitir la columna
¿Cuáles son las formas en que esta cadena de columna puede ser comparado como una fecha en un hql?

  • Se intenta «aaaa-MM-dd» ? seleccione nt.valeur de NotifTypeActionChampAddValVO nt donde nt.valide = 1 y nt.typeActionChampAdditionnelValue.champAdditionnel.id = 123 y cast(nt.valeur como la fecha) = ‘2015/01/01’)
  • sí, me sale el mismo error
  • Un último comentario puede probar u «2015-01-01» ?
  • Usted puede tratar de YYYY-MM-dd formato.. referencia stackoverflow.com/questions/5423296/…
  • He intentado tanto ‘2015/01/01’ y ‘2015-01-01’, pero regresa con la misma excepción.
  • ¿Cómo son los dataType de los valores representados en la tabla de base de datos? Puedes publicar algunos ejemplos?
  • Ejemplo de un valor es el 01/02/2015

InformationsquelleAutor Vimal Basdeo | 2015-01-23

3 Comentarios

  1. 5

    Puede utilizar db2 función to_date para lanzar diferentes formatos de cadena hasta la fecha.
    Por ejemplo

    date(to_date(column,'DD-MM-YYYY HH:MI:SS'))

    Así que consulta podría ser (depende del formato que se usa en la columna nt.valeur)

    select nt.valeur from NotifTypeActionChampAddValVO  nt where nt.valide = 1  and nt.typeActionChampAdditionnelValue.champAdditionnel.id = 123  and date(to_date(nt.valeur,'DD-MM-YYYY HH:MI:SS')) = '01/01/2015')

    Ver: TO_DATE función escalar

    to_date es en realidad alias para TIMESTAMP_FORMAT función en la que el formato de la cadena de formato es mejor documentada.

    • Tengo la misma salvedad anterior
    • La cadena de formato de fecha puede depender de configuración regional. Por favor, intente select nt.valeur from NotifTypeActionChampAddValVO nt where nt.valide = 1 and nt.typeActionChampAdditionnelValue.champAdditionnel.id = 123 and date(to_date(nt.valeur,'DD-MM-YYYY HH:MI:SS')) = date(to_date('01-01-2015 00:00:00','DD-MM-YYYY HH:MI:SS'))). Pero por favor, edite la cadena de formato según el formato de tus células.
  2. 2

    Usted puede hacer esto sin tratar de poner en cadena hasta la fecha. Pruebe este

    select nt.valeur from NotifTypeActionChampAddValVO  nt where nt.valide = 1  and nt.typeActionChampAdditionnelValue.champAdditionnel.id = 123  and concat(substring(nt.valeur, 7, 4), substring(nt.valeur, 4, 2), substring(nt.valeur, 1, 2)) > '20150101'

    Esto está bajo la suposición de que 01/01/2015 de su ejemplo es dd/MM/yyyy (pero se puede cambiar fácilmente), y que se puede adaptar el formato de parámetros para yyyyMMdd.

    • Esto no va a comparar fechas ,Sino que Se va a comparar tanto las Cadenas.
  3. 1

    Intente esto:-

    from NotifTypeActionChampAddValVO  nt where nt.valide = 1  and nt.typeActionChampAdditionnelValue.champAdditionnel.id = 123  and nt.valeur ='2015-01-01'

Dejar respuesta

Please enter your comment!
Please enter your name here