• Как правильно выполнить sql запрос при помощи bat файла?

    @SLJ Автор вопроса
    Сергей Паньков, я так понимаю это обычный VARCHAR, зачем там F не ясно. Может от разработчика F=Frontol).
    после апдейта с триммированием пробелы больше не появлялись
    после обновления таблиц? или отдельных полей?
    5e5f65d1a0685867037754.jpeg
  • Как правильно выполнить sql запрос при помощи bat файла?

    @SLJ Автор вопроса
    Сергей Паньков, триммировать в запросе или в самой БД? А так да, строки FVARCHAR100. Делал FVARCHAR40, убрало половину пробелов.
  • Как правильно выполнить sql запрос при помощи bat файла?

    @SLJ Автор вопроса
    Сергей Паньков, res2001, господа, спасибо за уделенное внимание. Задачу решил следующим образом:
    bat файл:
    set isql="C:\Program Files (x86)\FireBird\FireBird_2_1\BIN\isql.exe"
    set inputfile="C:\Users\Admin\Documents\tee\query.sql"
    set outputfile="C:\Users\Admin\Documents\tee\output_%Date:~6,4%%Date:~3,2%%Date:~0,2%.txt"
    %isql% -i %inputfile% -o %outputfile% -q


    сам запрос следующего вида:
    CONNECT 'E:\Torgovlya54\MAIN.GDB' user 'SYSDBA' password 'masterkey';
    SELECT C.CODE, C.NAME, T.TRANZDATE, max(T.TRANZTIME), T.INFOSTR, sum(T.SUMM) FROM DOCUMENT D LEFT JOIN TRANZT T ON D.ID = T.DOCUMENTID JOIN CLIENT C ON D.CLIENTID = C.ID WHERE T.TRANZDATE = cast('now' as date) and D.STATE = 1 AND D.ISFISCAL = 1 AND D.CLIENTID >=0 AND T.TRANZTYPE = '36' GROUP BY C.CODE, C.NAME, T.TRANZDATE, T.INFOSTR;
    commit work;


    Как результат вижу следующие данные, но единственное что еще не решил это как убрать лишние пробелы при select. Уместо ли применение функции TRIM? Или другие способы есть? Пока у меня не вышло убрать пробелы.
    5e5ec88ce38dc743272502.jpeg
  • Как правильно выполнить sql запрос при помощи bat файла?

    @SLJ Автор вопроса
    Сергей Паньков, ошибку пути понял - отсутствовал пробел в строке "Program Files(x86)".
    Теперь ошибка подключения...я пока думаю)

    5e5e2253f22cd173736848.png
  • Как правильно выполнить sql запрос при помощи bat файла?

    @SLJ Автор вопроса
    Сергей Паньков, конечно. Я через него данный запрос могу выполнить.
  • Как правильно выполнить sql запрос при помощи bat файла?

    @SLJ Автор вопроса
    res2001, По результату 1.log:
    "1.bat" не является внутренней или внешней
    командой, исполняемой программой или пакетным файлом.

    Сергей Паньков, Не сразу понял, запускаю через cmd. Ошибка пути, но какого. Путь к серверу указан верно. К запросу прописывал полный путь, но они и лежат в одном месте.
    5e5e1fce3e6d5103735304.png
  • Как правильно выполнить sql запрос при помощи bat файла?

    @SLJ Автор вопроса
    res2001, добрый день.
    Запускаю 1.bat
    set mytime=%time%
    set mydate=%date:~-10%
    rem set mydate=%mydate:~6,4%%mydate:~3,2%%mydate:~0,2%
    set mydt=%mydate% %mytime% 
    
    set isql="C:\\Program Files(x86)\\FireBird\\FireBird_2_1\\BIN\\isql.exe"
    set inputfile=query.sql
    set outputfile=outputfile.txt
    
    echo %mydt% >> %outputfile%
    
    %isql% -input %inputfile% -output %outputfile%


    query.sql
    CONNECT '127.0.0.1/3080:E:\Torgovlya54\MAIN.GDB' USER 'sysdba' PASSWORD 'masterkey';
    
    SELECT C.CODE AS "Табельный", C.NAME AS "Ф.И.О.", T.TRANZDATE AS "Дата", max(T.TRANZTIME) AS "Время", T.INFOSTR AS "Карта", sum(T.SUMM) AS "Сумма" FROM DOCUMENT D LEFT JOIN TRANZT T ON D.ID = T.DOCUMENTID JOIN CLIENT C ON D.CLIENTID = C.ID WHERE T.TRANZDATE = cast('now' as date) and D.STATE = 1 AND D.ISFISCAL = 1 AND D.CLIENTID >=0 AND T.TRANZTYPE = '36' GROUP BY C.CODE, C.NAME, T.TRANZDATE, T.INFOSTR;
    
    commit work;


    Получаю файл outputfile.txt содержимое которого "03.03.2020 11:33:17,62". Всё.
  • Как правильно выполнить sql запрос при помощи bat файла?

    @SLJ Автор вопроса
    set isql="C:\\Program Files(x86)\\FireBird\\FireBird_2_1\\BIN\\isql.exe"
    echo ^
    CONNECT '127.0.0.1/3050:E:\Torgovlya54\MAIN.GDB' USER 'sysdba' PASSWORD 'masterkey''; ^
    SELECT C.CODE AS "Табельный", C.NAME AS "Ф.И.О.", T.TRANZDATE AS "Дата", max(T.TRANZTIME) AS "Время", T.INFOSTR AS "Карта", sum(T.SUMM) AS "Сумма" FROM DOCUMENT D LEFT JOIN TRANZT T ON D.ID = T.DOCUMENTID JOIN CLIENT C ON D.CLIENTID = C.ID WHERE T.TRANZDATE = cast('now' as date) and D.STATE = 1 AND D.ISFISCAL = 1 AND D.CLIENTID >=0 AND T.TRANZTYPE = '36' GROUP BY C.CODE, C.NAME, T.TRANZDATE, T.INFOSTR; ^
    | %isql% > outputfile.txt


    Данное решение не выдает результатов. Ещё, как вариант, пробовал такую конструкцию:
    set mytime=%time%
    set mydate=%date:~-10%
    rem set mydate=%mydate:~6,4%%mydate:~3,2%%mydate:~0,2%
    set mydt=%mydate% %mytime% 
    set isql="C:\\Program Files(x86)\\FireBird\\FireBird_2_1\\BIN\\isql.exe"
    set inputfile=query.sql
    set outputfile=outputfile.txt
    echo %mydt% >> %outputfile%
    %isql% -input %inputfile% -output %outputfile%


    Брать файл с запросом из вне. В query.sql лежит сам запрос:
    CONNECT '127.0.0.1/3050:E:\Torgovlya54\MAIN.GDB' USER 'sysdba' PASSWORD 'masterkey''; 
    SELECT C.CODE AS "Табельный", C.NAME AS "Ф.И.О.", T.TRANZDATE AS "Дата", max(T.TRANZTIME) AS "Время", T.INFOSTR AS "Карта", sum(T.SUMM) AS "Сумма" FROM DOCUMENT D LEFT JOIN TRANZT T ON D.ID = T.DOCUMENTID JOIN CLIENT C ON D.CLIENTID = C.ID WHERE T.TRANZDATE = cast('now' as date) and D.STATE = 1 AND D.ISFISCAL = 1 AND D.CLIENTID >=0 AND T.TRANZTYPE = '36' GROUP BY C.CODE, C.NAME, T.TRANZDATE, T.INFOSTR; 
    commit work;


    Пока что тоже безрезультатно.
  • Как посчитать сумму одинаковых значений по одной колонке, но разных по другой?

    @SLJ Автор вопроса
    Спасибо за ответ, он действительно верный.
    1) Это только для обкатки, поскольку искал записи, сделанные в строго определенное время.
    3) Группировка было ДО того, как Вы помогли мне с подсчетом.
    2) Вот тут не совсем понял. Задача данного запроса - это извлечение данных из БД в рамках одних суток от 00:00:00: до 23:59:59. Можете заметить, добавил строку T.TRANZDATE = cast('now' as date) - использовать системную дату, в целях автоматизации запуска.
    На Ваш взгляд, имеет ли смысл описанная вами доработка для данной задачи?

    SELECT
        C.CODE AS "Табельный",
        C.NAME AS "Ф.И.О.",
        T.TRANZDATE AS "Дата",
        max(T.TRANZTIME) AS "Время",
        T.INFOSTR AS "Карта",
        sum(T.SUMM) AS "Сумма"
    FROM 
        DOCUMENT D
            LEFT JOIN TRANZT T ON D.ID = T.DOCUMENTID
            JOIN CLIENT C ON D.CLIENTID = C.ID
    WHERE
          T.TRANZDATE = cast('now' as date) and
          D.STATE = 1 AND
          D.ISFISCAL = 1 AND
          D.CLIENTID >=0 AND
          T.TRANZTYPE = '36'
    GROUP BY
        C.CODE,
        C.NAME,
        T.TRANZDATE,
        T.INFOSTR