powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Timestamp и Date
23 сообщений из 23, страница 1 из 1
Timestamp и Date
    #39377445
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!
имеется сервлет для построения диаграммы
диаграмма должна отражать количество поступления товаров за каждый день, за текущий месяц
этот сервлет и диаграмму я использовал в другом проекте там все было нормально. Вот только в БД там был тип Date а сейчас Timestamp. и как бы в Date записывались данные в таком виде (yyyy-mm-dd 00:00:00.0) т.е. время = 00
а в Timestamp точная время т.е. (2016-12-29 12:49:15.6)
я понимаю что из-за этого я не получаю то что надо...

вот фрагмент кода:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
JSONArray array_info = new JSONArray();
        for (int i = 0; i < allMaterials.size(); i++) {
            JSONObject json_info = new JSONObject();
            Calendar currentDate_ = Calendar.getInstance();
            currentDate_.setTime(new Date());
            Calendar c_ = new GregorianCalendar(currentDate.get(currentDate.YEAR), currentDate.get(currentDate.MONTH), 1);
            try {
                json_info.put("name", allMaterials.get(i).getNaim());
            } catch (JSONException e) {
                System.out.println("проблема в json_info.put: " + e);
            }
            //System.out.println("----------------------------------------------------");
            while (c_.before(currentDate_)) {
                java.sql.Date sqlDate = new java.sql.Date(c_.getTime().getTime());
                List<MaterialSklad> ACurrData =
                    sel.getMaterialSkladFindByCurrDate(sqlDate, allMaterials.get(i).getId());
                try {
                    json_info.append("data", MCurrData.size());
                } catch (JSONException e) {
                    System.out.println("проблема в json_info.put: " + e);
                }

                c_.add(Calendar.DAY_OF_MONTH, 1);
            }
            //System.out.println("----------------------------------------------------");
            array_info.put(json_info);
        }
...
Рейтинг: 0 / 0
Timestamp и Date
    #39377459
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МузаффарВот только в БД там был тип Date а сейчас Timestamp
округлить при получении?
...
Рейтинг: 0 / 0
Timestamp и Date
    #39377576
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123округлить при получении?

прошу прошения?

З.Ы. я же в запросе даю в качестве параметра yyyy-mm-dd 00:00:00.0 из базы в таких моментах времени ничего нету же...
при записи да конечно можно округлить до 00 но тогда теряется весь смысл этой таблицы...

или я что то не понял про округление?
...
Рейтинг: 0 / 0
Timestamp и Date
    #39377586
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так а вопрос то в чем?
...
Рейтинг: 0 / 0
Timestamp и Date
    #39377594
sanBez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тоже не понял проблемы. Данные не поднимаются? А заменить в запросе точное сравнение даты (округлить где надо) на интервал религия не позволяет?
...
Рейтинг: 0 / 0
Timestamp и Date
    #39377597
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
sel.getMaterialSkladFindByCurrDate(sqlDate, allMaterials.get(i).getId());


А как запрос выглядит? Если там строгое сравнение, то конечно работать не будет.

Как-то так наверное нужно.
Код: java
1.
WHERE DATE(created_at) = ?
...
Рейтинг: 0 / 0
Timestamp и Date
    #39377599
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettТак а вопрос то в чем?

я получаю ничего т.е. 0 товаров привезли в склад...
это все из-за вышесказанного т.е. сервлет передает в БД 2016-12-29 00:00:00.0 а база отвечает что в этот промежутке времени ничего не было т.е. честно возвращает 0 , но в БД записан типа в 2016-12-29 15:10:20.0 привезли цемент...
...
Рейтинг: 0 / 0
Timestamp и Date
    #39377605
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettА как запрос выглядит? Если там строгое сравнение, то конечно работать не будет.


вот запрос
Код: java
1.
select o from MaterialSklad o where o.data_post=:data_post and o.naimMaterialSpr1.id=:id



авторДанные не поднимаются? А заменить в запросе точное сравнение даты (округлить где надо) на интервал религия не позволяет?
1) на первый вопрос вроде бы ответил уже...
2) религия то позволяет вот только где округлить?
...
Рейтинг: 0 / 0
Timestamp и Date
    #39377608
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну я выше написал пример, как можно доработать.
...
Рейтинг: 0 / 0
Timestamp и Date
    #39377613
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
select o from MaterialSklad o where DATE(o.data_post) = :data_post and o.naimMaterialSpr1.id = :id



А какая СУБД?
...
Рейтинг: 0 / 0
Timestamp и Date
    #39377619
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettНу я выше написал пример, как можно доработать.
да но в ОРМ есть ли функция DATE? вроде нет.
...
Рейтинг: 0 / 0
Timestamp и Date
    #39377620
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettА какая СУБД?
мускул, но счас это не важно... хотя если не использовать нативный запрос...
...
Рейтинг: 0 / 0
Timestamp и Date
    #39377634
sanBez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффар,
>> религия то позволяет вот только где округлить?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public List<MaterialSklad> getMaterialSkladFindByCurrDate(Date date, Long materialId) {
   Date start = truncToDay(date);
   Date end = addDay(start, 1);

   return   PersistenceManager.getInstance().getEntityManager()
                                  .createNamedQuery("myQuery")
                                  .setParameter("startDate", start).setParameter("endDate", end).
                                  .setParameter("materialId", materialId).  
                                  getResultList();
}



Код: plsql
1.
select o from MaterialSklad o where o.data_post>:startDate and o.data_post<=:endDate  and o.naimMaterialSpr1.id=:id



то ли я не выспался... в упор не вижу проблем.
Пойду спать. Звиняйте если чо
...
Рейтинг: 0 / 0
Timestamp и Date
    #39377640
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sanBez,

идея хорошая... :)
а есть ли ещё варианты?
...
Рейтинг: 0 / 0
Timestamp и Date
    #39377672
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффар
Код: java
1.
2.
3.
where 
TRUNC(o.data_post)
=:data_post


?
...
Рейтинг: 0 / 0
Timestamp и Date
    #39377684
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет в мускуле такой функции:

Код: sql
1.
2.
mysql> SELECT TRUNC(CURRENT_TIMESTAMP());
ERROR 1305 (42000): FUNCTION yii2advanced.TRUNC does not exist



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
mysql> SELECT DATE(CURRENT_TIMESTAMP());
+---------------------------+
| DATE(CURRENT_TIMESTAMP()) |
+---------------------------+
| 2016-12-29                |
+---------------------------+
1 row in set (0.00 sec)

mysql>




авторто ли я не выспался... в упор не вижу проблем.
Тогда уж

Код: sql
1.
o.data_post>=:startDate and o.data_post<:endDate



только скорее всего в плане производительности будет хуже. Да и зачем эти городушки?
...
Рейтинг: 0 / 0
Timestamp и Date
    #39377687
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор будет хуже
Потому что ты под такой запрос индекс не создаешь.
...
Рейтинг: 0 / 0
Timestamp и Date
    #39377688
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
точнее создашь, но частично только.
...
Рейтинг: 0 / 0
Timestamp и Date
    #39377692
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя если честно, такое

Код: sql
1.
WHERE date(date_created) = CURRENT_DATE;



он еще хуже выполняет, проверил сейчас
я думал он сможет это оптимизировать.
...
Рейтинг: 0 / 0
Timestamp и Date
    #39377698
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно как-то так
Код: sql
1.
 created_at BETWEEN date(:timestamp) AND date(:timestamp) + INTERVAL 1 DAY


Но как на вашу ОРМ перенести я не знаю :)
...
Рейтинг: 0 / 0
Timestamp и Date
    #39377737
sanBez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hett
Код: sql
1.
o.data_post>=:startDate and o.data_post<:endDate




где ставить равенство определяется бизнес-логикой приложения. Единых правил тут нет. Как ТС учитывает данные так и надо ставить

только скорее всего в плане производительности будет хуже

ну да ну да. Тут же такая большая разница в запросе... План исполнения прям поменяется кардинально

Потому что ты под такой запрос индекс не создаешь.

Шо? Индекс по дате + айдишник

точнее создашь, но частично только.

Уже отмечаем?
Что это? Объясните плиз


Пойду дерну 100 грамм, тут уже всем весело я гляжу.
Можно не отвечать.
Последний рабочий день в году... кайф... через пару часов корпоратив...

Всех с наступающим! Java рулит!

)))
...
Рейтинг: 0 / 0
Timestamp и Date
    #39377922
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Музаффар
Код: java
1.
2.
3.
where 
TRUNC(o.data_post)
=:data_post


?

а разве там есть ТРАНК?

получается либо нативный запрос с функцией DATE, либо вариант sanBez'а?
...
Рейтинг: 0 / 0
Timestamp и Date
    #39377997
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sanBezгде ставить равенство определяется бизнес-логикой приложения. Единых правил тут нет. Как ТС учитывает данные так и надо ставить


Да вроде тут логика четко описана.

sanBezну да ну да. Тут же такая большая разница в запросе... План исполнения прям поменяется кардинально

Поменяется. Советую проверить.

авторШо? Индекс по дате + айдишник
В данном случае дата берется в условии 2 раза, + не полностью, вторая часть индекса, в Вашем случае, будет бесполезной. Я бы предложил по id + date, но в любом случае будет скан таблицы.
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Timestamp и Date
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]