Как задать интервал дат в sql
Перейти к содержимому

Как задать интервал дат в sql

  • автор:

SQL INTERVAL

SQL INTERVAL — это оператор, который позволяет работать с интервалами времени в SQL-запросах. Он предоставляет возможность выполнять различные операции с датами, такие как сложение, вычитание, форматирование и сравнение интервалов времени.

1. Сложение интервалов времени:

SELECT DATE_ADD(‘2021-01-01’, INTERVAL 1 DAY);

2. Вычитание интервалов времени:

SELECT DATE_SUB(‘2021-01-01’, INTERVAL 1 MONTH);

3. Вычисление разницы между двумя датами:

SELECT TIMESTAMPDIFF(MINUTE, ‘2021-01-01 00:00:00’, ‘2021-01-01 00:15:00’);

— Результат: 15 (разница в минутах)

4. Форматирование интервала времени:

SELECT CONCAT(DAY(INTERVAL 1 MONTH), ‘ months, ‘, HOUR(INTERVAL 1 DAY), ‘ days’);

— Результат: 1 month, 24 hours

5. Сравнение интервалов времени:

SELECT ‘2021-01-01’ > DATE_ADD(‘2020-12-31’, INTERVAL 1 DAY);

— Результат: 1 (истина)

6. Использование INTERVAL с функцией NOW():

SELECT NOW() — INTERVAL 1 HOUR;

— Результат: текущая дата и время минус 1 час

7. Подсчет суммы интервалов с использованием GROUP BY:

SELECT category, SUM(duration) AS total_duration

GROUP BY category;

В этом примере мы рассчитываем сумму длительности событий в каждой категории.

В общем, SQL INTERVAL — мощный инструмент для работы с интервалами времени в SQL-запросах. Он позволяет выполнять различные операции с датами и временем, что делает SQL более гибким и удобным для работы с временными данными.

Как задать интервал в SQL: руководство для разработчиков

В этом примере мы выбираем все строки из таблицы table_name, где значение в столбце date_column находится в заданном интервале.

Детальный ответ

Как задать интервал в SQL

Приветствую! В этой статье мы рассмотрим, как задать интервал в SQL. Интервалы очень полезны при работе с датами или временем в базах данных. Мы поговорим о разных способах задания интервалов и предоставим примеры кода для наглядности.

Использование ключевого слова INTERVAL

В SQL существует ключевое слово INTERVAL, которое позволяет задавать интервалы различных типов. Оно может использоваться совместно с функциями дат и времени для выполнения различных операций. Например, чтобы добавить интервал к текущей дате, мы можем использовать следующий синтаксис:

SELECT CURRENT_DATE() + INTERVAL 1 DAY;

В этом примере мы добавляем 1 день к текущей дате с помощью интервала в один день. В результате мы получим новую дату, отстоящую на один день от текущей.

Задание интервала по конкретному значению

Интервалы также могут быть заданы с использованием конкретных значений, таких как годы, месяцы, дни и т.д. Например, следующий код демонстрирует, как задать интервал в 5 дней:

SELECT '2022-01-01' + INTERVAL 5 DAY;

Здесь мы добавляем интервал в пять дней к указанной дате ‘2022-01-01’. В результате получается новая дата, отстоящая от указанной на пять дней.

Вычисление интервала между двумя датами

SQL также позволяет вычислять интервал между двумя датами. Для этого мы можем использовать функцию DATEDIFF. Ниже приведен пример, показывающий, как вычислить интервал в днях между двумя датами:

SELECT DATEDIFF('2022-02-15', '2022-02-10');

В результате выполнения этого запроса мы получим значение 5, что означает разницу в днях между указанными датами.

Задание интервала с использованием разных единиц измерения

SQL позволяет задавать интервалы с использованием разных единиц измерения, таких как месяцы, часы, минуты и т.д. Например, следующий код показывает, как задать интервал в три месяца:

SELECT '2022-01-01' + INTERVAL 3 MONTH;

Здесь мы добавляем интервал в три месяца к указанной дате ‘2022-01-01’. В результате получается новая дата, отстоящая от указанной на три месяца.

Суммирование интервалов

SQL также позволяет суммировать интервалы с помощью оператора «+». Например, для вычисления интервала в 10 дней, следующий код может быть использован:

SELECT INTERVAL 5 DAY + INTERVAL 5 DAY;

В результате этого запроса будет получен интервал в 10 дней.

Вывод результатов на основе интервала

Интервалы могут быть использованы для фильтрации результатов запроса на основе определенного временного периода. Например, следующий запрос выбирает все записи, созданные за последнюю неделю:

SELECT * FROM table_name WHERE created_at >= DATE_SUB(NOW(), INTERVAL 1 WEEK);

В этом примере мы используем функцию DATE_SUB и INTERVAL, чтобы вычислить начальную дату для фильтрации. Результатом будет выборка всех записей, созданных в течение последней недели.

Заключение

В этой статье мы рассмотрели различные способы задания интервалов в SQL. Мы узнали, как использовать ключевое слово INTERVAL, задавать интервалы с использованием конкретных значений и различных единиц измерения. Также мы рассмотрели вычисление интервалов между двумя датами и суммирование интервалов. Надеюсь, эта информация будет полезной для вас при работе с SQL!

Как задать интервал дат в sql

Команда INTERVAL позволяет прибавлять к дате и отнимать от нее определенные промежутки времени.

После команды INTERVAL можно указывать определенную часть даты (день, месяц или год и тп), к примеру, так INTERVAL 1 DAY или INTERVAL 3 MONTH , или сразу несколько частей.

В этом случае значения даты берутся в кавычки, пример: давайте прибавим 1 год и 3 месяца — это будет выглядеть так: INTERVAL ‘1-3’ YEAR_MONTH .

Мы указываем, что хотим год и месяц (вот так: YEAR_MONTH ), и перед этим в кавычках пишем сначала значение для года, потом значение для месяца. Между ними ставим разделитель (он может быть абсолютно любым).

Смотрите список возможных комбинаций (разделители указаны для примера, они могут быть любыми):

Значение Ожидаемый формат
SECOND секунды
MINUTE минуты
HOUR часы
DAY дни
MONTH месяцы
YEAR года
MINUTE_SECOND «минуты:секунды»
HOUR_MINUTE «часы:минуты»
DAY_HOUR «дни часы»
YEAR_MONTH «года-месяцы»
HOUR_SECOND «часы:минуты:секунды»
DAY_MINUTE «дни часы:минуты»
DAY_SECOND «дни часы:минуты:секунды»

В данном примере к дате прибавляется 1 день:

В данном примере от даты отнимается 1 день:

В данном примере к дате прибавляется 1 год и 2 месяца:

В данном примере к дате прибавляется 1 год, 2 месяца и 1 день:

Запрос можно переписать таким образом:

В данном примере к дате прибавляется 1 год, отнимаются 2 месяца и прибавляется 1 день:

SQL функции даты и времени

Приветствую Вас, уважаемые читатели блога webcodius.ru. В базе данных часто требуется хранить различные данные связанные с датой и временем. Это может быть дата добавления информации, дата регистрации пользователя, время последней автоизации и другие данные. В языке SQL есть множество функций связанных с датой и временем, сегодня их и рассмотрим.

Все ниже рассмотренные функции работают с календарными типами данных.

Получение текущей даты и времени.

Чтобы получить текущую дату и время используется функция NOW ().

SELECT NOW ()
Результат: 2015-09-25 14:42:53

Для получения только текущей даты есть функция CURDATE ().

SELECT CURDATE ()
Результат: 2015-09-25

И функция CURTIME (), которая возвращает только текущее время:

SELECT CURTIME ()
Результат: 14:42:53

Функции CURDATE () и NOW () удобно использовать для добавления в базу данных записей, для которых требуется хранить дату добавления. Например, при добавлении статьи на сайт хорошо бы хранить ее дату публикации. Тогда запрос на добавление статьи в базу будет примерно таким:

INSERT INTO posts (id_post, text_post, date_publication) VALUES (1, ‘текст статьи’, NOW ());

Прибавление и вычитание дат и времени

Функция ADDDATE (date, INTERVAL value) прибавляет к дате date значение value и возвращает полученное значение. В качестве value могут выступать следующие значения:

  • SECOND — секунды
  • MINUTE — минуты
  • HOUR — часы
  • DAY — дни
  • WEEK — недели
  • MONTH — месяцы
  • QUARTER — кварталы
  • YEAR — годы

а также их комбинации:

  • MINUTE_SECOND — минуты и секунды
  • HOUR_SECONDчасы — минуты и секунды
  • HOUR_MINUTE — часы и минуты
  • DAY_SECOND — дни, часы, минуты и секунды
  • DAY_MINUTE — дни, часы и минуты
  • DAY_HOUR — дни и часы
  • YEAR_MONTH — года и месяцы.

SELECT ADDDATE (‘2015-09-28 10:30:20’, INTERVAL 1 DAY)
Результат: 2015-09-29 10:30:20

SELECT ADDDATE (‘2015-09-28 10:30:20’, INTERVAL ‘3 1:20’ DAY_MINUTE)
Результат: 2015-10-01 11:50:20

Функция SUBDATE (date, INTERVAL value) производит вычитание значения value из даты date . Пример:

SELECT SUBDATE (‘2015-09-28 10:30:20’, INTERVAL 20 HOUR)
Результат: 2015-09-27 14:30:20

Функция PERIOD_ADD (period, n) прибавляет к значению period n месяцев. Значение период должно быть представлено в формате YYYYMM (например сентябрь 2015 года будет 201509). Пример:

SELECT PERIOD_ADD (201509, 4)
Результат: 201601

Функция TIMESTAMPADD (interval, n, date) прибавляет к дате date временной интервал n , значения которого задаются параметром interval . Возможные значения параметра interval:

  • FRAC_SECOND — микросекунды
  • SECOND — секунды
  • MINUTE — минуты
  • HOUR — часы
  • DAY — дни
  • WEEK — недели
  • MONTH — месяцы
  • QUARTER — кварталы
  • YEAR — годы

SELECT TIMESTAMPADD (QUARTER, 1, ‘2015-09-28’)
Результат: 2015-12-28

Функция SUBTIME (date, time) вычитает из даты date время time. Пример:

SELECT SUBTIME (‘2015-09-28 10:30:20′, ’50:20:19’)
Результат: 2015-09-26 08:10:01

Вычисление интервала между датами

Функция TIMEDIFF (date1, date2) вычисляет разницу в часах, минутах и секундах между двумя датами date1 и date2 . Пример:

SELECT TIMEDIFF (‘2015-09-28 10:30:20’, ‘2015-09-29 10:30:20’)
Результат: -24:10:00

Функция DATEDIFF (date1, date2) вычисляет разницу в днях между двумя датами, при этом часы, минуты и секунды при указании дат игнорируются. Пример:

SELECT DATEDIFF (‘2015-09-28 00:00:20’, ‘2015-09-27 23:40:20’)
Результат: 1

С помощью этой функции легко определить сколько дней прошло с даты публикации статьи:

SELECT DATEDIFF (CURDATE (), date_publication) FROM posts WHERE id_post = 1

Функция PERIOD_DIFF (period1, period2) вычисляет разницу в месяцах между двумя датами. Даты должны быть представлены в формате YYYYMM . Например, узнаем сколько месяцев прошло с января 2015 по сентябрь 2015:

SELECT PERIOD_DIFF (201509, 201501)
Результат: 9

Функция TIMESTAMPDIFF (interval, date1, date2) вычисляет разницу между датами date2 и date1 в единицах указанных в параметре interval . При этом interval может принимать следующие значения:

  • FRAC_SECOND — микросекунды
  • SECOND — секунды
  • MINUTE — минуты
  • HOUR — часы
  • DAY — дни
  • WEEK — недели
  • MONTH — месяцы
  • QUARTER — кварталы
  • YEAR — годы

SELECT TIMESTAMPDIFF (HOUR, ‘2015-09-28 10:30:20’, ‘2015-09-28 19:50:20’)
Результат: 9

Получение различных форматов даты и времени и другой информации

Функция DATE (datetime) возвращает дату, отсекая время. Пример:

SELECT DATE (‘2015-09-28 10:30:20’)
Результат: 2015-09-28

Функция TIME (datetime) возвращает время, отсекая дату. Пример:

SELECT TIME (‘2015-09-28 10:30:20’)
Результат: 10:30:20

Функция TIMESTAMP (date) возвращает полный формат со временем даты date . Пример:

TIMESTAMP (‘2015-09-28’)
Результат: 2015-09-28 00:00:00

DAY (date) и DAYOFMONTH (date). Функции-синонимы, которые возвращают порядковый номер дня месяца. Пример:

SELECT DAY (‘2015-09-28’), DAYOFMONTH (‘2015-09-28’)
Результат: 28 | 28

Функции DAYNAME (date), DAYOFWEEK (date) и WEEKDAY (date). Первая функция возвращает название дня недели, вторая — номер дня недели (отсчет от 1 — воскресенье до 7 — суббота), третья также номер дня недели только другой отсчет(отсчет от 0 — понедельник, до 6 — воскресенье). Пример:

SELECT DAYNAME (‘2015-09-28’), DAYOFWEEK (‘2015-09-28’), WEEKDAY (‘2015-09-28’)
Результат: Monday 2 | 0

Функции WEEK (date) и WEEKOFYEAR (datetime). Обе функции возвращают номер недели в году, только у первой неделя начинается с воскресенья, а у второй с понедельника. Пример:

SELECT WEEK (‘2015-09-28 10:30:20’), WEEKOFYEAR (‘2015-09-28 10:30:20’)
Результат: 39 | 40

Функция MONTH (date) возвращает числовое значение месяца (от 1 до 12), а MONTHNAME (date) название месяца. Пример:

SELECT MONTH (‘2015-09-28 10:30:20’), MONTHNAME (‘2015-09-28 10:30:20’)
Результат: 9 | September

Функция QUARTER (date) возвращает номер квартала года (от 1 до 4). Пример:

SELECT QUARTER (‘2015-09-28 10:30:20’)
Результат: 3

Функция YEAR (date) возвращает значение года (от 1000 до 9999). Пример:

SELECT YEAR (‘2015-09-28 10:30:20’)
Результат: 2015

Функция DAYOFYEAR (date) возвращает порядковый номер дня в году (от 1 до 366). Прмиер:

SELECT DAYOFYEAR (‘2015-09-28 10:30:20’)
Результат: 271

Функция HOUR (datetime) возвращает значение часа (от 0 до 23). Пример:

SELECT HOUR (‘2015-09-28 10:30:20’)
Результат: 10

Функция MINUTE (datetime) возвращает значение минут (от 0 до 59). Пример:

SELECT MINUTE (‘2015-09-28 10:30:20’)
Результат: 30

Функция SECOND (datetime) возвращает значение секунд (от 0 до 59). Пример:

SELECT SECOND (‘2015-09-28 10:30:20’)
Результат: 20

Функция EXTRACT (type FROM date) возвращает часть даты date определяемую параметром type . Пример:

SELECT EXTRACT (YEAR FROM ‘2015-09-28 10:30:20’), EXTRACT (MONTH FROM ‘2015-09-28 10:30:20’), EXTRACT (DAY FROM ‘2015-09-28 10:30:20’), EXTRACT (HOUR FROM ‘2015-09-28 10:30:20’), EXTRACT (MINUTE FROM ‘2015-09-28 10:30:20’), EXTRACT (SECOND FROM ‘2015-09-28 10:30:20’)
Результат: 2015 | 9 | 28 | 10 | 30 | 20

Взаимообратные функции TO_DAYS (date) и FROM_DAYS (n). Первая преобразует дату в количество дней, прошедших с нулевого года. Вторая, наоборот, принимает число дней, прошедших с нулевого года и преобразует их в дату. Пример:

SELECT TO_DAYS (‘2015-09-28 10:30:20’), FROM_DAYS (736234)
Результат: 736234 | 2015-09-28

Взаимообратные функции UNIX_TIMESTAMP (date) и FROM_UNIXTIME (n). Первая преобразует дату в количество секунд, прошедших с 1 января 1970 года. Вторая, наоборот, принимает число секунд, с 1 января 1970 года и преобразует их в дату. Пример:

SELECT UNIX_TIMESTAMP (‘2015-09-28 10:30:20’), FROM_UNIXTIME (1443425420)
Результат: 1443425420 | 2015-09-28 10:30:20

Взаимообратные функции TIME_TO_SEC (time) и SEC_TO_TIME (n). Первая преобразует время в количество секунд, прошедших от начала суток. Вторая, наоборот, принимает число секунд с начала суток и преобразует их во время. Пример:

SELECT TIME_TO_SEC (’10:30:20′), SEC_TO_TIME (37820)
Результат: 37820 | 10:30:20

Функция MAKEDATE (year, n) принимает год year и номер дня в году n и преобразует их в дату. Пример:

SQL query to select dates between two dates

I have a start_date and end_date . I want to get the list of dates in between these two dates. Can anyone help me pointing the mistake in my query.

Here Date is a datetime variable.

24 Answers 24

you should put those two dates between single quotes like..

keep in mind that the first date is inclusive, but the second is exclusive, as it effectively is ‘2011/02/27 00:00:00’

Since a datetime without a specified time segment will have a value of date 00:00:00.000 , if you want to be sure you get all the dates in your range, you must either supply the time for your ending date or increase your ending date and use < .

DO NOT use the following, as it could return some records from 2011/02/28 if their times are 00:00:00.000.

The date values need to be typed as strings.

To ensure future-proofing your query for SQL Server 2008 and higher, Date should be escaped because it’s a reserved word in later versions.

Bear in mind that the dates without times take midnight as their defaults, so you may not have the correct value there.

Here, first add a day to the current endDate, it will be 2011-02-28 00:00:00 , then you subtract one second to make the end date 2011-02-27 23:59:59 . By doing this, you can get all the dates between the given intervals.

— if data type is different

This query stands good for fetching the values between current date and its next 3 dates

This will eventually add extra 3 days of buffer to the current date.

This is very old, but given a lot of experiences I have had with dates, you might want to consider this: People use different regional settings, as such, some people (and some databases/computers, depending on regional settings) may read this date 11/12/2016 as 11th Dec 2016 or Nov 12, 2016. Even more, 16/11/12 supplied to MySQL database will be internally converted to 12 Nov 2016, while Access database running on a UK regional setting computer will interpret and store it as 16th Nov 2012.

Therefore, I made it my policy to be explicit whenever I am going to interact with dates and databases. So I always supply my queries and programming codes as follows:

Note also that Access will accept the #, thus:

but MS SQL server will not, so I always use » ‘ » as above, which both databases accept.

And when getting that date from a variable in code, I always convert the result to string as follows:

I am writing this because I know sometimes some programmers may not be keen enough to detect the inherent conversion. There will be no error for dates < 13, just different results!

As for the question asked, add one day to the last date and make the comparison as follows:

Try putting the dates between # # for example:

It worked for me.

if its date in 24 hours and start in morning and end in the night should add something like :

This query will find Cities with more than 2 occurrences where their DOB is in a specified time range for employees.

best query for the select date between current date and back three days:

best query for the select date between current date and next three days:

Check below Examples: Both working and Non-Working.

AND below is not working:

You ca try this SQL

I like to use the syntax 1 MonthName 2015 for dates ex:

It worked for me

we can use between to show two dates data but this will search the whole data and compare so it will make our process slow for huge data, so i suggest everyone to use datediff :

here calender is the Table, dt as the starting date variable and dt2 is the finishing date variable.

There are a lot of bad answers and habits in this thread, when it comes to selecting based on a date range where the records might have non-zero time values — including the second highest answer at time of writing.

Never use code like this: Date between ‘2011/02/25’ and ‘2011/02/27 23:59:59.999’

To see why, try it yourself:

In both cases, you’ll get both rows back. Assuming the date values you’re looking at are in the old datetime type, a date literal with a millisecond value of 999 used in a comparison with those dates will be rounded to millisecond 000 of the next second, as datetime isn’t precise to the nearest millisecond. You can have 997 or 000, but nothing in between.

You could use the millisecond value of 997, and that would work — assuming you only ever need to work with datetime values, and not datetime2 values, as these can be far more precise. In that scenario, you would then miss records with a time value 23:59:59.99872, for example. The code originally suggested would also miss records with a time value of 23:59:59.9995, for example.

Как сравнивать даты в MySQL

Как сравнивать даты в MySQL

MySQL предоставляет возможность сравнивать различные даты между собой, или с каким-то определенным выражением. В этой статье мы обсудим, как работать с датой в Mysql, как из сравнивать и строить запросы с учетом дат.

Когда вам нужно сравнить дату какого-то столбца с произвольной датой, вы можете использовать функцию DATE() , которая извлекает дату из переданного аргумента (без учета времени) и сравнить ее со строкой нужной вам даты.

В прошлой своей статье я писал про работу с индексами. А в этой затрону не менее важную тему работы с датой в MySQL, понимание которое необходимо каждому разработчику.

Например, предположим, что у вас есть таблица MySQL под названием users со следующими строками:

Теперь вам нужно выбрать все строки из таблицы users , у которых значение last_update больше 2021-08-01 .

И это достаточно просто сделать:

Результат запроса выше будет следующим:

При сравнении столбца типа DATETIME или TIMESTAMP с датой в виде строки (как в запросе выше), MySQL автоматически преобразует значения к единому формату для сравнения и веронет подходящзие результаты.

Чтобы проверить результат запроса добавим оператор ORDER BY в приведенный выше запрос.

Вы можете сразу определить, удовлетворяет ли запрос вашему требованию, взглянув на первую строку. Как и в приведенном выше примере, самое раннее значение столбца last_update должно быть 2021-08-02 .

Вы также можете использовать оператор BETWEEN , чтобы выбрать все строки, в которых столбец даты находится между двумя указанными выражениями даты:

Приведенный выше запрос выведет следующий результат:

НО! MySQL допускает только один формат даты: yyyy-mm-dd , поэтому вам нужно форматировать любое строковое выражение даты по которым вы хотите выбирать данные к нужному формату.

Зачем использовать функцию DATE() для сравнения дат

Функция MySQL DATE() извлекает часть даты из столбца DATETIME или TIMESTAMP и приводит её к формату строки, как показано ниже:

Эта функция используется для того, чтобы MySQL использовал для сравнения только часть даты вашего столбца, без учета времени.

Если не использовать функцию DATE() , то MySQL также будет сравнивать и время столбца с вашим строковым выражением. Таким образом, результатом будут записи, полностью совпадаюащие до секунды.

Возвращаясь к приведенному выше примеру таблицы, следующий запрос:

Вернет такие результаты:

Как видно из результатов, условие сравнения last_update > «2021-08-01» становится last_update > «2021-08-01 00:00:00» , и MySQL возвращает соответствующий набор результатов.

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

Следующий запрос из той же таблицы:

Даст следующий результат:

Сравнение дат между двумя столбцами дат

Если у вас уже есть два столбца даты, то вы можете сразу же сравнить их с помощью операторов < , = , > или BETWEEN .

Предположим, что в вашей таблице есть столбцы last_update и last_login , как показано ниже:

Чтобы получить все строки, в которых столбец last_login находится позже столбца last_update , вы можете использовать следующий запрос:

Результат будет следующим:

Вот каким образом вы можете выполнять сравнение дат в MySQL.

Не забудьте, что вам нужно иметь строковое выражение даты, отформатированное как yyyy-mm-dd или yyyy-mm-dd hh:mm:ss , если вы хотите сравнить и временную часть.

Выбор дат за определнный интервал

Очень часто приходится выбирать записи с датой за определнный интервал. Для этих целей в MySql существуют встроенная функции INTERVAL , упрощающая работу с датами за определенный период.

Например, для того, чтобы выбрать записи, обновленные за последний год, выполним запрос:

При том, что INTERVAL может работать с различными интервалами времени:

  • SECOND — секунды
  • MINUTE — минуты
  • HOUR — часы
  • DAY — дни
  • MONTH — месяцы
  • YEAR — года

Те же самые действия применимы и к UPDATE-операциям:

Резюме

В этой статье поговорили про работу с датами в Mysql. Как можно выбрать даты определенной даты, или по указанному интервалу. А так же, как работать с колонками дат разных типов.

Если вы хотите поупражняться с запросами, то вот вам демонстрационная таблица:

Похожие публикации:

  1. Как создать логин и пароль в sql
  2. Как создать строку в sql
  3. Как сохранить скрипт в sql
  4. Как удалить sql server management studio

Как указать интервал дат в SQL из GET?

Собственно во вопрос явно простой но я не пхпшник
Как подставить вместо
даты переменную из гет параметра, да еще и в интервале ?

  • Вопрос задан более трёх лет назад
  • 135 просмотров

Комментировать
Решения вопроса 1

FanatPHP

Чебуратор тега РНР

конечно за такой ответ я буду гореть в аду, но лучше это сделаю я, чем какой-нибудь подлец
данные из query string лежат в массиве $_GET
интервал в SQL делается просто, оператором BETWEEN
причем к первой дате прибавляется 00:00:00, а ко второй 23:59:59
функции mysql_query в РНР уже много лет как нет
но если уж приходится копаться в какой-то доисторическоом гэ

$begin = addslashes($_GET['begin']. ' 00:00:00'); $end = addslashes($_GET['end']. ' 23:59:59'); $banid = (int)$banid; $sql = "SELECT * FROM `betaintranet`.`ad_stat` WHERE `ban_id` = $banid AND `datetime` BETWEEN '$begin' AND '$end'";

но меня конечно аж передергивает от этого говнокода
утешает только то что местные помогайки напишут еще хуже

в нормальном мире этот код выглядит так

$begin = $_GET['begin']. ' 00:00:00'; $end = $_GET['end']. ' 23:59:59'; $sql = "SELECT * FROM `betaintranet`.`ad_stat` WHERE `ban_id` = ? AND `datetime` BETWEEN ? AND ?"; $stmt = $pdo->prepare($sql); $stmt->execute([$banid, $begin, $end]);

Ответ написан более трёх лет назад

shambler81

Виктор Таран @shambler81 Автор вопроса

гыгы я не разраб, но меня блевать от этого кода тянет не меньше,
Когда я вижу по 48 LEFT JOIN из 3 бд, и запросов к АПИ движка, сдается мне что тут должно быть не так 😉
Мне бы эту поделку дотянуть еще пол годика, Все это . уже рефакторится на битрикс.
Единственное что может оправдать такое художество что это 4тый бэк к сайту притом это уже тупо статистика и по факту . как она собрана 😉
А хранить баннер к сайту друпала в 3 базах и собстенный фронт поверх друпала как оно вам? ( разраб умер от передоза)

Rsa97

У него ещё и форматы в $_GET не совпадают с форматом в MySQL.
Так что надо добавить преобразование через substr 🙂

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *