Сравнить 2 даты
Сравнить даты
необходимо узнать попадает ли текущая дата в определенный временный интервал $today =.
Сравнить даты
Добрый день! Разрабатываю свою систему бронирования. Хотелось бы уточнить подходит ли моя проверка.
Сравнить даты
Искал по форуму, что находил не работает у меня почему то. вот пробывал так $date1 = .
как сравнить даты ?
допустим есть переменные (даты): a = "08/12/2005" b = "08/12/2008" как определить раньше-позже?
Сравнение дат через Sql запрос
БД MSAccess (*.mdb), доступ до нее из delphi через ADO.
Подскажите пожалуйста текст SQL запроса для выборки по датам (больше, меньше, равна)
вот фрагментик кода, что в нем нужно поправить:
FizFind.Active:=false;
FizFind.SQL.Clear;
FizFind.SQL.Add(‘Select * from table’);
FizFind.sql.Add(‘WHERE’);
if FindDate.Text<>» then FizFind.SQL.Add(‘BirDate = ‘+FindDate.Text);
FizFind.active:=true;
сдесь FizFind — ADQQuery, FindDate — коомпонент TEdit, откуда берется значение для сравнения; BirDate — поле в таблице типа DateTime
В данном случае выскочит ошибка нессответствия типов данных, а как надо прописать, чтобы прошло сравнение?
Guest
Наверное дату в кавычки нужно заключить
yuretz
Пробовал кавычки, выдает «нессответствие типов данных в выражении условия отбора» оно и понятно, в общем-то, в кавычки обычно строковые переменные заключаются, а у меня поле DateTime
Других идей нет?
Для: yuretz
пробуй выполнять запрос без «подстановки», т.е. сразу
FizFind.SQL.Add('Select * from table where BirDate = 01/01/2001');
если формат даты соответствует (т.е. ДД/ММ/ГГГГ), то всё должно быть ОК, если нет — меняй формат на ДД-ММ-ГГГГ. А ещё попродуй дату «окружить» в диезы
FizFind.SQL.Add('Select * from table where BirDate = #01/01/2001#');
где-то я такое встречал. Можно поискать функции явного преобразования к дате (что-то типа TO_DATE(‘1/1/1’)).
Shurikanin
Если ты создашь запрос с параметром и передашь туда дату как параметр все получится. Сам долго бился пока на нашел решение. Быть может есть и другой способ, но у меня получилось только так.
Barmutik
Дата в MS Access представляется в виде числового значения. Поэтому следует передавать не текст а число. Просто перобразуйте в число и всё будет работать.
_dimka_
а я собственную функцию замутил, как . говорил.
кстати как число тоже надо попробовать
Mistey
BirDate имеет тип ДАТА? Если база Акцесовская, то все просто. Сначала дату надо привести в американскому стандарту. Можно воспользоваться в этом случае фунцией Format, но у меня так ничего не получилось, и писала функцию сама. Это во-первых. А во-вторых: в Access в SQL-запросах дату необходимо заключать в символы «решетка». В итоге должно получиться: #mm/dd/yyyy#
А вот базах dBase и FoxPro такая фишка не срабатывает. Так до сих пор там запрос по датам сделать не могу. Даже с помощью мастера.
Margo
Приветствую!
Решила не создавать новую тему, а воспользоваться уже существующей. 😆
У меня примерно таже проблема, но с тем условием что БД в MSSQL.
Как организовать сравнение дат через запрос?
Дату которую нужно сравнивать с табличной вводит юзер. (это параметры InqTime0 и InqTime1)
ADOQuery1.SQL.Add(‘SELECT Count(DISTINCT [№_изделия]) AS Count ‘);
ADOQuery1.SQL.Add(‘FROM Изделия ‘);
ADOQuery1.SQL.Add(WHERE ‘Время_начала_сборки BETWEEN’);
ADOQuery1.SQL.Add(QuotedStr(FormatDateTime(‘dd/mm/yyyy’,InqTime0))+’ AND’);
ADOQuery1.SQL.Add(QuotedStr(FormatDateTime(‘dd/mm/yyyy’,InqTime1)));
ADOQuery1.SQL.Add(‘ AND Время_окончания_сборки BETWEEN’);
ADOQuery1.SQL.Add(QuotedStr(FormatDateTime(‘dd/mm/yyyy’,InqTime0))+’ AND’);
ADOQuery1.SQL.Add(QuotedStr(FormatDateTime(‘dd/mm/yyyy’,InqTime1)));
Надеюсь на скорый ответ.
Margo
sax_ol
так и знала что будет подвох.
Параметры sql или delphi?
Margo
sax_ol
мммм.
Мне необходимо найти кол-во изделий собранных за определённый период.
В таблице есть дата начала сборки и окончания.
Пользователь вводить свои две даты и они должны сравниваться с теми что в таблице.
Margo
sax_ol
это границы того периода, за который он хочет увидеть количество собранных изделий
Margo
sax_ol
Да, верно.
Margo
ммм. ложила. Вот что у меня получалось
ADOQuery1.SQL.Text := ‘SELECT Count(DISTINCT [№_изделия]) AS Count FROM Изделия WHERE Изделия.Время_начала_сборки >= »%’+InqTime0+’%» AND Изделия.Время_окончания_сборки
Но запись явно не верна
Margo
sax_ol
хорошо)
эммм. параметры..
ADOQuery1.SQL.Add(‘Время_начала_сбоки >=’);
ADOQuery1.SQL.ADD(‘:Q’);
ADOQuery1.Parameters.ParamByName(‘Q’).Value:= InqTime0;
ADOQuery1.SQL.Add(‘Время_окончания_сборки <=');
ADOQuery1.SQL.ADD(‘:Q1’);
ADOQuery1.Parameters.ParamByName(‘Q1’).Value:= InqTime1;
Margo
sax_ol
Оно работает!
Ну наконец-то ))
Спасибо огромное))
далее надо исправить SELECT. И поэтому вопрос, кто посоветовал DISTINCT тут? зачем он тут?
Ну, в принципе, он не должен сильно влиять на результат. Хотя можно заменить на *.
а посоветовали преподаватели. )
BKK
Доброго времени суток.
У меня схожая ситуация, делая по вашему примеру
Получается так
Имеется база данных в Аксесс соединяю через ADO
Нужно произвести выборку по Дате и по Специальности
Вводим специальность и диапозон даты в котором должна произвестись выборка
текст такой
SQL.Add(‘SELECT №,Data,№_computer,Family,SPEC,Group,Vypol’);
SQL.Add(‘FROM Таблица1’);
SQL.Add(‘WHERE’);
SQL.Add(‘SPEC = («‘ + fam + ‘»)’);
SQL.Add ( ‘Data >= :nqTime0 AND Data ADOQuery1.Parameters.ParamByName(‘nqTime0 ‘).Value:=DateTimePicker1.Date ;
ADOQuery1.Parameters.ParamByName(‘nqTime1 ‘).Value:=DateTimePicker2.Date ;
fam-введенная специальность
Дата вводиться через DateTimePicker1.Date?DateTimePicker2.Date
Ошибка выходит: ADOQuery1: Parametr ‘nqTimer0’ not found
Если сможете помогите разобратся! Буду очень признателен.
Статус Закрыто для дальнейших ответов.
Мы в соцсетях:
Обучение наступательной кибербезопасности в игровой форме. Начать игру!
Функции сравнения
Например, вы не можете сравнить дату со строкой. Надо использовать функцию преобразования строки в дату или наоборот.
Строки сравниваются побайтово. Более короткая строка меньше всех строк, начинающихся с неё и содержащих ещё хотя бы один символ.
Замечание. До версии 1.1.54134 сравнение знаковых и беззнаковых целых чисел производилось также, как в C++. То есть, вы могли получить неверный результат в таких случаях: SELECT 9223372036854775807 > -1. С версии 1.1.54134 поведение изменилось и стало математически корректным.
Как сравнить две даты js
Чтобы сравнить даты, можно их преобразовать в объекты Date и сравнить обычным способом. Однако если даты одинаковые, то они не будут равны, так как сравнение идёт по ссылкам. Чтобы добиться корректного сравнения дат, можно использовать метод getTime() :
const firstDate = new Date('2022-03-15'); const secondDate = new Date('2022-03-13'); console.log(firstDate secondDate); // false console.log(firstDate > secondDate); // true const equalDate1 = new Date('2022-03-13'); const equalDate2 = new Date('2022-03-13'); console.log(equalDate1.getTime() == equalDate2.getTime()); // true
