#json #spring-boot #validation #datetime
#json #весенняя загрузка #проверка #datetime
Вопрос:
Я хочу написать проверку таким образом, чтобы мой запрос должен выдавать true, если тот же CCN и дата уже существуют в базе данных, из JSON и В DB datetime сохраняется в «гггг-ММ-дд ЧЧ: мм: сс», но при моей проверке мне нужно взять только дату [гггг-ММ-дд] и сравнить.
Я новичок в spring boot
Это то, что у меня есть в моем классе модели
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
@Temporal(TemporalType.DATE)
private Date datetime;
Репозиторий для моего класса
@Query("SELECT CASE WHEN COUNT(c) > 0 THEN true ELSE false END FROM TABLEX c WHERE c.ccn = :ccn and c.datetime= :datetime")
boolean isExistbyCcnAndDate(@Param("ccn") String conveyancereferencenumber, @Param("datetime") @DateTimeFormat(pattern = "yyyy-MM-dd") Date date);
Когда я пытаюсь это сделать, результат как всегда false.
Вот как я передаю значения в репозиторий
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String dateString = sdf.format(model.getDatetime());
convertedDate = sdf.parse(dateString);
isExistCcnAndDate=repository.isExistbyCcnAndDate(model.getCcn(),convertedDate);
Комментарии:
1. Если ваше DateTime сохранено в yyyy-MM-dd HH: mm: ss, и вы пытаетесь сравнить его с yyyy-MM-dd, это всегда будет false, потому что вы пытаетесь сравнить, например, 2020-12-10 10:15:25 с 2020-12-10 00:00:00, вам следует попытаться выяснить, как отформатировать c.datetime в вашем запросе (MySQL: DATE_FORMAT) или, возможно, сохранить дату в другом формате, избыточном в вашей базе данных.
2. Привет, спасибо за воспроизведение, я добавил @Param («datetime») @DateTimeFormat(шаблон = «гггг-ММ-дд») Дата, дата); это не сработает?
3. Я так не думаю, потому что @Param(«datetime») @DateTimeFormat (шаблон = «гггг-ММ-дд») будет форматировать только ваши входные данные, но не то, что сохранено в базе данных.
4. ваш запрос будет выглядеть как SELECT CASE, КОГДА COUNT(c) > 0, ЗАТЕМ true, ИНАЧЕ false ЗАВЕРШАЕТСЯ ИЗ TABLEX c, ГДЕ c.ccn = ABC123XXX и c.datetime = 2020-12-15 это никогда не будет соответствовать дате, отформатированной по шаблону гггг-ММ-дд ЧЧ: мм: сс.
5. Я хочу отформатировать mvalue из моего входного JSON и значение из базы данных как в yyyy-MM-dd, так и в yyyyy-MM-dd HH: mm: ss в этом формате в настоящее время
Ответ №1:
Проверьте мой sqlfiddle.
http://sqlfiddle.com /#!9/5305eb/3
Используя sql fiddle, это сработает: Создайте shema:
create table c(datetime DATETIME, ccn TEXT)
insert into c (datetime, ccn) values ('2020-01-01 10:10:50' , 'a');
Попробуйте прочитать и отфильтровать шаг за шагом:
select * from c;
select * from c where c.datetime = '2020-01-01 10:10:50';
select * from c where date(c.datetime)= date('2020-01-01');
Как я уже говорил, можете ли вы использовать date (), DATE () или что-то еще, зависит от вашего сервера, sqlfiddle — это MySQL.