O que me parece, é que dataInicio é um tipo Integer e, desta maneira, você não pode converter para String.
G
guilhermebhte
Não dataInicio é do tipo Timestamp.
Na verdade preciso pegar somente juntos anomes, desta data, por isto converto para String, Replace, para tirar -, ai depois tenho que converter para Inteiro, para validar se é <=.
Se deixo como abaixo, funciona, mas não tem como validar se é <=, com String.
Faça a transformação depois, afinal, se está como timestamp, é um número (tecnicamente, seria um long representando os segundos a partir de 00:00 de 01/01/1970)
G
guilhermebhte
Não entendi.
D
darlan_machado
O que ocorre é que, sendo do tipo timestamp, é um número e não uma data formatada no padrão yyyy-MM-dd,
Esse valor, um long, para ser exato, será lido pelo hibernate, convertido no tipo de data que você tem (seja ele java.util.Date, Calendar ou outra coisa qualquer). Só então que poderá ser transformado conforme você precisa.
G
guilhermebhte
Entendi…
Mas neste momento ele já convertei para String ou não ?
sb.append("AND replace(substring(cast(emp.dataInicio As string), 1, 7), ‘-’, ‘’) = :mesAnoas ");, pois usei um cast String
Valores retornados:
emp.dataInicio - TimesTamp
substring(cast(emp.dataInicio As string), 1, 7) = 2017-01
replace(substring(cast(emp.dataInicio As string), 1, 7) , ‘-’, ‘’) = 201701
Depois do replace deveria aceitar o cast int … Isto que não estendi, pois no SQL ele executa
G
Solucao aceita
guilhermebhte
Consegui assim:
SELECT emp FROM EmpresaEntity emp WHERE emp.id = :id AND emp.entidade = :entidade AND month(emp.dataInicio) + year(emp.dataInicio) <= :mesano