Критерий API Фильтр поля даты на основе одного столбца - PullRequest
0 голосов
/ 24 января 2019

У меня есть требование в моем проекте, где фильтр даты должен быть применен к полю с разделителями трубы.

Как наилучший API Criteria можно использовать для достижения того же?

Table: Flyout

-------------------------------------------------------------
Name                   Date_flyout
-------------------------------------------------------------
John                   |08-06-2017|09-07-2017|02-10-2018|
Adam                   |06-06-2017|10-07-2017|03-06-2018|
Mary                   |07-08-2017|10-06-2017|06-06-2018|
-------------------------------------------------------------

Filter 
From-Flyout-Date: 06-01-2017
To-Flyout-Date  : 07-10-2017

Excepted ResultSet

-------------------------------------------------------------
Name                   Date_flyout
--------------------------------------------------------------
Adam                   |**06-06-2017**|10-07-2017|03-06-2018|
Mary                   |**07-08-2017**|10-06-2017|06-06-2018|
--------------------------------------------------------------


For obvious reason, the below criteria api wont work. However, how best we can modify the below to get excepted results??

criteria.add(Restrictions.ge("Date_flyout", "06-01-2017"))
criteria.add(Restrictions.le("Date_flyout", "07-10-2017"))

1 Ответ

0 голосов
/ 24 января 2019

Я думаю, что использование .sqlRestriction решит вашу проблему здесь. Проверьте код ниже:

    Session session = ... ;

    Criteria c = session.createCriteria(Flyout.class);
    c.add(Restrictions.sqlRestriction("substring_index(substring(Date_flyout,2),',',1) between ? and ?",
            new Object[]{"06-01-2017", "07-10-2017"},
            new Type[]{StandardBasicTypes.STRING, StandardBasicTypes.STRING}));
    List<Flyout> tList = c.list();

    for (Flyout f : tList) {

        System.out.println(f.getName() + " - " + f.yourTableProperyDateHere());
    }

    session.close(); 

substring(Date_flyout,2) - игнорирование стартовой трубы из колонны substring_index(substring(Date_flyout,2),',',1) - разделение текста из первой трубы после игнорирования начальной трубы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...