Преобразование DateAndTime во время и сравнение с базой данных для проверки

#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.