powered by simpleCommunicator - 2.0.28     © 2024 Programmizd 02
Map
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Разные результаты запроса при одних условиях
2 сообщений из 2, страница 1 из 1
Разные результаты запроса при одних условиях
    #40138714
qwerty5000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток!

Когда жестко задаю дату в запросе (в BETWEEN), выдает нужную мне выборку (запрос максимально упрощен и может выглядеть глупо, но суть проблемы отражает)
Код: PL/pgSQL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Drop table temp_table;
CREATE  TABLE temp_table (dValueTag double precision, dateReport timestamp, dateStartInterval timestamp, dateEndInterval timestamp, strNameTag text, dateValueTag timestamp);
do $$
declare iIter integer:= 0;
declare dValueTag double precision:= NULL;
declare dateReport timestamp:= '2024-07-22 00:00:00';
declare dateValueTag timestamp:= NULL;
declare strNameTag text:= '_';
declare iDay int:= (date_part('day', dateReport));
begin
 while iIter < iDay  loop

SELECT
h.valdouble,  h.time, n.tagname
INTO dValueTag, dateValueTag, strNameTag FROM  nodes_history h JOIN  nodes n ON n.NodeId = h.NodeId
WHERE n.TagName = 'ASRMB.U_AVT12.FT0038.Out.Mt' AND (h.time BETWEEN ('2024-07-22 00:00:00') AND ('2024-07-23 00:00:00')) AND h.recordtype != 'ubound' ORDER BY h.time DESC LIMIT 1;

INSERT INTO temp_table VALUES (dValueTag, dateReport, ('2024-07-22 00:00:00'), ('2024-07-23 00:00:00' ), strNameTag, dateValueTag);

iIter = iIter + 1;
end loop;
end $$;
select * from temp_table
Выборка:
full.png
Если задаю туже самую дату через переменную
Код: PL/pgSQL
1.
declare dateReport timestamp:= '2024-07-22 00:00:00';
получаю странный результат!
Начиная с 6-ой строки.
Код: PL/pgSQL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Drop table temp_table;
CREATE  TABLE temp_table (dValueTag double precision, dateReport timestamp, dateStartInterval timestamp, dateEndInterval timestamp, strNameTag text, dateValueTag timestamp);
do $$
declare iIter integer:= 0;
declare dValueTag double precision:= NULL;
declare dateReport timestamp:= '2024-07-22 00:00:00';
declare dateValueTag timestamp:= NULL;
declare strNameTag text:= '_';
declare iDay int:= (date_part('day', dateReport));
begin
 while iIter < iDay  loop

SELECT
h.valdouble,  h.time, n.tagname
INTO dValueTag, dateValueTag, strNameTag FROM  nodes_history h JOIN  nodes n ON n.NodeId = h.NodeId
WHERE n.TagName = 'ASRMB.U_AVT12.FT0038.Out.Mt' AND (h.time BETWEEN dateReport AND ('2024-07-23 00:00:00')) AND h.recordtype != 'ubound' ORDER BY h.time DESC LIMIT 1;

INSERT INTO temp_table VALUES (dValueTag, dateReport, dateReport, ('2024-07-23 00:00:00' ), strNameTag, dateValueTag);

iIter = iIter + 1;
end loop;
end $$;
select * from temp_table
Выборка:
null.png
...
Изменено: 26.07.2024, 09:51 - qwerty5000
Рейтинг: 0 / 0
Разные результаты запроса при одних условиях
    #40138717
Павел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwerty5000 [игнорируется] 

Попробуйте присвоить значение с использованием функции to_timestamp(). Без нее вы передаете просто текст, и субд может его по-разному воспринимать:
to_timestamp('2024-07-22 00:00:00', 'yyyy-MM-dd HH24:MI:SS'), вроде формат такой
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Разные результаты запроса при одних условиях
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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