Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

MYSQL выборка по дате ?

n0bleman Ученик (4), открыт 1 день назад
Если не указывать время то столбец не выводится как выполнить запрос используя разделитель ? типо он искал в базе не учитывая время в столбце перезаписывать теперь все стролбцы что ли на timestamp или добавлять разделитель ? типо 2025.01.01/18:48:26

SELECT * FROM `Base` WHERE date='2025.01.01';

2025.01.01 18:48:26
1 ответ
♡$ⴎG@r₱u₷sყ♡ Искусственный Интеллект (172443) 1 день назад
Вот несколько способов выборки по дате в MySQL, игнорируя время:

```sql
-- Используя DATE()
SELECT * FROM Base WHERE DATE(date) = '2025-01-20';

-- Используя LIKE
SELECT * FROM Base WHERE date LIKE '2025-01-20%';

-- Используя BETWEEN
SELECT * FROM Base
WHERE date BETWEEN '2025-01-20 00:00:00' AND '2025-01-20 23:59:59';

-- Используя форматирование даты
SELECT * FROM Base
WHERE DATE_FORMAT(date, '%Y-%m-%d') = '2025-01-20';
```

Любой из этих вариантов позволит найти записи за указанную дату независимо от времени.
n0blemanУченик (4) 1 день назад
спасибо БРО!!! то что нужно! главное работает а елси в таблице данные такого типа как по ним сделать выборку по отдельности ? 1/0/1
SELECT * FROM Base WHERE date LIKE '2025-01-20%';
♡$ⴎG@r₱u₷sყ♡ Искусственный Интеллект (172443) n0bleman, Для выборки данных формата "1/0/1" можно использовать такой запрос: ```sql SELECT * FROM Base WHERE date LIKE '1/0/1%' -- Или более точно через разделители SELECT * FROM Base WHERE SUBSTRING_INDEX(date, '/', 1) = '1' AND SUBSTRING_INDEX(SUBSTRING_INDEX(date, '/', 2), '/', -1) = '0' AND SUBSTRING_INDEX(date, '/', -1) = '1' ``` Также можно использовать отдельные части: ```sql -- Только по первому числу SELECT * FROM Base WHERE SUBSTRING_INDEX(date, '/', 1) = '1' ```
n0blemanУченик (4) 1 день назад
А если второе значение незвестно какм нему искать если больше >1 например оно может быть 1 может больше
SELECT * FROM Base WHERE vac LIKE '%/1/%'
♡$ⴎG@r₱u₷sყ♡ Искусственный Интеллект (172443) n0bleman, Для поиска по второму значению с условием "больше 1" можно использовать комбинацию SUBSTRING_INDEX и условий: ```sql SELECT * FROM Base WHERE CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(vac, '/', 2), '/', -1) AS SIGNED) > 1 ``` Или несколько вариантов сравнения: ```sql -- Больше 1 SELECT * FROM Base WHERE CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(vac, '/', 2), '/', -1) AS SIGNED) > 1 -- Больше или равно 1 SELECT * FROM Base WHERE CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(vac, '/', 2), '/', -1) AS SIGNED) >= 1 -- Между 1 и 5 SELECT * FROM Base WHERE CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(vac, '/', 2), '/', -1) AS SIGNED) BETWEEN 1 AND 5 ```
n0blemanУченик (4) 1 день назад
Как затьа ORDER By что у меня начинается d.m.y потом уже время идет
♡$ⴎG@r₱u₷sყ♡ Искусственный Интеллект (172443) n0bleman, Для правильной сортировки даты в формате dd.mm.yyyy используйте STR_TO_DATE: ```sql SELECT * FROM Base ORDER BY STR_TO_DATE(date, '%d.%m.%Y %H:%i:%s') DESC LIMIT 1 -- Или можно преобразовать в timestamp для сортировки: SELECT * FROM Base ORDER BY UNIX_TIMESTAMP(STR_TO_DATE(date, '%d.%m.%Y %H:%i:%s')) DESC LIMIT 1 ``` Это обеспечит корректную сортировку независимо от формата отображения даты.
Похожие вопросы