Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Ещё вопрос по выборке / 25 сообщений из 25, страница 1 из 1
29.10.2016, 21:02
    #39337063
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ещё вопрос по выборке
У меня есть система мониторинга одного процесса в программе,его запускают пользователи
в мониторинг кроме всего остального попадают два значени даты (первый диалект) - первое - непосредственно время запуска процесса, второе - параметр,который выбирает пользователь, он должен быть первое значение 0 часов 0 минут 0 секунд минус сутки
т.е. в правильном варианте это должно быть так:
2016-10-04 10:20:18 2016-10-03 00:00:00
2016-10-04 10:22:17 2016-10-03 00:00:00

остальные варианты ошибочны и их надо поймать
...
Рейтинг: 0 / 0
29.10.2016, 21:04
    #39337064
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ещё вопрос по выборке
Ошибочные варианты:
2016-10-05 10:12:36 2016-10-04 05:02:18
2016-10-06 10:57:01 2016-10-06 05:02:29
2016-10-12 08:37:07 2016-10-11 08:36:43
...
Рейтинг: 0 / 0
29.10.2016, 21:21
    #39337071
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ещё вопрос по выборке
Gallemar,

иди ка ты отдыхать

Код: plsql
1.
2.
3.
4.
5.
CREATE FUNCTION EXTRACT_DATE(ADATE DATE) RETURNS DATE
AS
BEGIN
  RETURN EXTRACT(YEAR FROM ADATE) || '-' || EXTRACT(MONTH FROM ADATE) || '-' || EXTRACT(DAY FROM ADATE);
END 
...
Рейтинг: 0 / 0
29.10.2016, 21:34
    #39337078
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ещё вопрос по выборке
Gallemar,

поймать это EXCEPTION кинуть что ли?
...
Рейтинг: 0 / 0
29.10.2016, 21:36
    #39337082
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ещё вопрос по выборке
Симонов ДенисGallemar,
иди ка ты отдыхать


Сейчас пойду. Не компилируется. Или я чего-то не понимаю.
...
Рейтинг: 0 / 0
29.10.2016, 21:44
    #39337086
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ещё вопрос по выборке
Gallemar,

ну ты чего совсем устал? Это же PSQL функция. Начиная с 3.0 такое возможно. В 2.5 только ХП, но в твоём случае просто выражение по месту подставить. Тебе ещё 1 день отнять надо.
...
Рейтинг: 0 / 0
29.10.2016, 21:47
    #39337092
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ещё вопрос по выборке
Симонов Денис,ааа
У меня 2.5, но общий смысл я понял. Это уже на завтра оставлю.
Я на недельной учебе-командировке был, ночь с днем теперь путаю.
...
Рейтинг: 0 / 0
31.10.2016, 07:11
    #39337487
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ещё вопрос по выборке
А в первом диалекте EXTRACT нормально работает?
Попробовал использовать, даже на пробном шаре получаю:
select (extract (year from '2016-10-05 10:12:36')) from rdb$database
Invalid String.
Dynamic SQL Error.
SQL error code = -105.
Specified EXTRACT part does not exist in input datatype.
...
Рейтинг: 0 / 0
31.10.2016, 08:30
    #39337500
Граур Станислав
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ещё вопрос по выборке
GallemarА в первом диалекте EXTRACT нормально работает?
Попробовал использовать, даже на пробном шаре получаю:
select (extract (year from '2016-10-05 10:12:36')) from rdb$database
Invalid String.


А так ?

Код: plsql
1.
select extract (year from cast('2016-10-05 10:12:36' as timestamp)) from rdb$database
...
Рейтинг: 0 / 0
31.10.2016, 08:37
    #39337502
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ещё вопрос по выборке
Граур Станислав,ага, получилось,спасибо
...
Рейтинг: 0 / 0
31.10.2016, 08:51
    #39337509
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ещё вопрос по выборке
Помогите,всё равно не понимаю как сделать
...
Рейтинг: 0 / 0
31.10.2016, 09:20
    #39337525
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ещё вопрос по выборке
Gallemar,

ты так и не ответил. Тебе EXCEPTION нужен когда пользователь неправильно ввёл или преобразовать его ввод так чтобы оттуда время убрать? Зачем вообще пользователя заставлять вводить то, что вычисляется из первой даты?
...
Рейтинг: 0 / 0
31.10.2016, 09:48
    #39337554
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ещё вопрос по выборке
Симонов ДенисGallemar,

ты так и не ответил. Тебе EXCEPTION нужен когда пользователь неправильно ввёл или преобразовать его ввод так чтобы оттуда время убрать? Зачем вообще пользователя заставлять вводить то, что вычисляется из первой даты?
Да это вообще пользователем не вводится. Первое значение берется из current_timestamp, второе - приходит с формы. Поэтому по ошибкам я могу узнать постфактум из отчета. Пользователей много,выбирать каждый день ошибки вручную неудобно, вот и хочу сделать выборку только с ошибочными вариантами.
...
Рейтинг: 0 / 0
31.10.2016, 09:52
    #39337558
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ещё вопрос по выборке
Gallemar,

не проще ли не допускать неправильный ввод? Т.е. делать валидацию до отправки формы, с помощью JavaScript например
...
Рейтинг: 0 / 0
31.10.2016, 09:57
    #39337565
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ещё вопрос по выборке
Симонов Денис, JavaScript на Delphi? Такое возможно в VCL?
0_0
...
Рейтинг: 0 / 0
31.10.2016, 09:59
    #39337567
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ещё вопрос по выборке
Gallemar,

я думал ты веб форму имеешь ввиду. Смешались твои посты в кучу. А в Delphi, то ещё проще.
...
Рейтинг: 0 / 0
31.10.2016, 10:01
    #39337570
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ещё вопрос по выборке
Симонов Денис, извини. У меня основное приложение на Delphi, закрытое, а я пишу веб-интерфейс для мониторинга.
...
Рейтинг: 0 / 0
31.10.2016, 10:15
    #39337594
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ещё вопрос по выборке
Gallemar,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE PROCEDURE CHECK_UASERDATE(ADATE TIMESTAMP)
AS
  DECLARE SEC INT;
  DECLARE MIN INT;
  DECLARE H INT;
  DECLARE CUR_DATE TIMESTAMP;
  DECLARE BEGIN_DATE TIMESTAMP;
BEGIN
   CUR_DATE = CAST(EXTRACT(YEAR FROM CURRENT_TIMESTAMP) || '-' || 
                             EXTRACT(MONTH FROM CURRENT_TIMESTAMP) || '-' || 
                             EXTRACT(DAY FROM CURRENT_TIMESTAMP) AS TIMESTAMP);  
   BEGIN_DATE = CAST(EXTRACT(YEAR FROM ADATE) || '-' || 
                             EXTRACT(MONTH FROM ADATE) || '-' || 
                             EXTRACT(DAY FROM ADATE) AS TIMESTAMP);  
   IF (ADATE > BEGIN_DATE AND CUR_DATE - BEGIN_DATE > 1) THEN
     EXCEPTION E_INCORRECT_DATE;
END



так пойдёт?
...
Рейтинг: 0 / 0
31.10.2016, 10:25
    #39337608
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ещё вопрос по выборке
Симонов Денис,а зачем
declare variable SEC integer;
declare variable min integer;
declare variable H integer;

если они нигде не используются? Ну и MIN зарегистрирован, его даже закавыченный не получается скомпилировать.
Эксепшен не нужен. Мой отчет тянет данные из таблицы
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE TABLE ZM_LOAD_CASH (
    TIME_WRITE        DATE,
    DATE_LOAD         DATE,
    FULL_LOAD         CHAR(1),
    CASH_LOAD         INTEGER,
    SESSION_LOAD      INTEGER,
    KIND_LOAD         INTEGER,
    SHOPINDEX_LOAD    INTEGER,
    FILIALINDEX_LOAD  INTEGER,
    USER_LOAD         VARCHAR(80)
);



запросом
Код: plsql
1.
2.
3.
select lc.*, tc.name as f_name from ZM_LOAD_CASH lc
left join th_classif tc
on lc.filialindex_load = tc.id_th_classif where USER_LOAD <> 'Дисконт' and TIME_WRITE BETWEEN '$TIME_WRITE1' and '$TIME_WRITE1 23:59:59'   and FULL_LOAD in ('$TIME_WRITE2') $SORT  



Мне нужно выбирать ошибки запросом (что наверно не получится) или селективной процедурой.
...
Рейтинг: 0 / 0
31.10.2016, 10:37
    #39337619
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ещё вопрос по выборке
Gallemar,

извиняюсь я этe процедуру даже не проверял, написал прямо на форуме из головы.
...
Рейтинг: 0 / 0
31.10.2016, 10:42
    #39337626
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ещё вопрос по выборке
Симонов Дениснаписал прямо на форуме из головы.
Я так и подумал. А как то селективной процедурой мой вопрос решить можно?
...
Рейтинг: 0 / 0
31.10.2016, 10:48
    #39337642
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ещё вопрос по выборке
Gallemar,

я не совсем понял что ты хочешь. $TIME_WRITE1 это и есть CURRENT_DATE? И что это за FULL_LOAD in ('$TIME_WRITE2')?

Может тебе вот этого достаточно

Код: sql
1.
2.
3.
4.
5.
6.
select lc.*, tc.name as f_name from ZM_LOAD_CASH lc
left join th_classif tc
on lc.filialindex_load = tc.id_th_classif 
where USER_LOAD <> 'Дисконт' 
  and TIME_WRITE > '$TIME_WRITE1' and TIME_WRITE <= '$TIME_WRITE1 23:59:59.0000'   
  and FULL_LOAD in ('$TIME_WRITE2') $SORT  
...
Рейтинг: 0 / 0
31.10.2016, 11:18
    #39337681
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ещё вопрос по выборке
Симонов ДенисGallemar,

я не совсем понял что ты хочешь. $TIME_WRITE1 это и есть CURRENT_DATE? И что это за FULL_LOAD in ('$TIME_WRITE2')?

Может тебе вот этого достаточно

Код: sql
1.
2.
3.
4.
5.
6.
select lc.*, tc.name as f_name from ZM_LOAD_CASH lc
left join th_classif tc
on lc.filialindex_load = tc.id_th_classif 
where USER_LOAD <> 'Дисконт' 
  and TIME_WRITE > '$TIME_WRITE1' and TIME_WRITE <= '$TIME_WRITE1 23:59:59.0000'   
  and FULL_LOAD in ('$TIME_WRITE2') $SORT  


$TIME_WRITE1 - это дата с веб-интерфейса, день за который берем данные. FULL_LOAD in ('$TIME_WRITE2') это дополнительное условие, это не время, просто на скорую руку писал, вот и оставил так. $SORT это по какому полю сортировать, галочка с веб передает order by
...
Рейтинг: 0 / 0
31.10.2016, 11:24
    #39337692
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ещё вопрос по выборке
Gallemar,

в этом виде он у тебя и так отсекает правильные варианты с 00:00:00, оставляя только со временем. Осталось только с CURRENT_TIMESTAMP связать. Что там должно быть я не понял.
...
Рейтинг: 0 / 0
31.10.2016, 11:38
    #39337709
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ещё вопрос по выборке
Симонов Денис,
не отсекает. Правильно или неправильно смотрим по полю DATE_LOAD, в моем запросе по нему никакой фильтрации нет. В самом начале темы я писал пример правильного/неправильного варианта:
TIME_WRITE DATE_LOAD
2016-10-05 10:12:36 2016-10-04 05:02:18
2016-10-06 10:57:01 2016-10-06 05:02:29
2016-10-12 08:37:07 2016-10-11 08:36:43
2016-10-04 10:20:18 2016-10-03 00:00:00
2016-10-04 10:22:17 2016-10-03 00:00:00

Вот так должно быть понятнее. Правильный вариант выделен красным.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Ещё вопрос по выборке / 25 сообщений из 25, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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