powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка по дате + любое время
15 сообщений из 15, страница 1 из 1
Выборка по дате + любое время
    #39055767
dok11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите как можно выбрать по колонке типа datetime только по определённой дате не взирая на время. Спасибо
...
Рейтинг: 0 / 0
Выборка по дате + любое время
    #39055783
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например, по диапазону от 00:00:00 этой даты включительно до 00:00:00 следующей даты невключительно.
...
Рейтинг: 0 / 0
Выборка по дате + любое время
    #39055795
dok11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот такое нужно было:
Код: sql
1.
2.
3.
SELECT *
FROM table
WHERE DATE(date_time_column) = '2015-09-12'



Пол ночи штудировал доки.

PS Вообще нужно постоянно изучать всё, очень много полезного, ну блин всегда времени тупо нету (
...
Рейтинг: 0 / 0
Выборка по дате + любое время
    #39055808
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dok11,

Не, так плохо - индекс использоваться не сможет. Хотя если быстродействие не критично, то годится.
...
Рейтинг: 0 / 0
Выборка по дате + любое время
    #39055979
dok11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

А подскажите пожалуйста как сделать что бы индекс использовался, там как раз то и довольно "тяжёлое место"

Спасибо.
...
Рейтинг: 0 / 0
Выборка по дате + любое время
    #39055993
dok11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так что ли нужно?

Код: sql
1.
2.
3.
SELECT *
FROM `table`
WHERE date_time_column = STR_TO_DATE('2015-09-12', '%Y-%m-%d %H:%i:%s')



Или так?

Код: sql
1.
2.
3.
4.
[SRC sql]
SELECT *
FROM `table`
WHERE DATE(date_time_column) = STR_TO_DATE('2015-09-12', '%Y-%m-%d %H:%i:%s')


[/SRC]
...
Рейтинг: 0 / 0
Выборка по дате + любое время
    #39055995
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
первый вариант ниачём, второй уже отбракован миксофтом
надо так, например
Код: sql
1.
where date_time_column >= '2015-09-12' and date_time_column < '2015-09-13'
...
Рейтинг: 0 / 0
Выборка по дате + любое время
    #39056006
dok11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

Так нет возможности использовать индексы, а они нам есть и нужны.
...
Рейтинг: 0 / 0
Выборка по дате + любое время
    #39056066
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dok11tanglir,

Так нет возможности использовать индексы, а они нам есть и нужны.Наоборот, именно вариант tanglir-а сможет использовать индекс по полю date_time_column.

Правда, параноик во мне требует дописать нулевое время в литералы дат, но это к индексу отношения не имеет.
...
Рейтинг: 0 / 0
Выборка по дате + любое время
    #39056187
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftНапример, по диапазону от 00:00:00 этой даты включительно до 00:00:00 следующей даты невключительно.

Б Л И Н!!!!! Я только сейчас узнал, что

Код: sql
1.
d between from and to 



- это аналог

Код: sql
1.
d >= from and d <= to



Вопрос:

существует ли какой-нибудь модификатор битвина, чтобы он был аналогом вот такой конструкции??

Код: sql
1.
d >= from and d < to
...
Рейтинг: 0 / 0
Выборка по дате + любое время
    #39056200
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumixсуществует ли какой-нибудь модификатор битвина, чтобы он был аналогом вот такой конструкции??Нет. Да и незачем.
...
Рейтинг: 0 / 0
Выборка по дате + любое время
    #39056201
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft, ok :-(
...
Рейтинг: 0 / 0
Выборка по дате + любое время
    #39056395
dok11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо с Вашей помощью разобрался. Вот только вопрос ещё возник.

Есть таблица в которой есть колонки:
1. Дата заезда человека DATE_IN
2. Дата выезда человека DATE_OUT

Мне нужно узнать что диапазон дат уже занят и между ними нельзя ставть заезды.

Например

DATE_IN - 01.10.2015
DATE_OUT - 10.10.2015

Как можно узнать что например дату 03.10.2015 нельзя ставить под заезд.

Такое вообще возможно на MySql'e сделать.
...
Рейтинг: 0 / 0
Выборка по дате + любое время
    #39056774
dok11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так вроде получается..
Код: sql
1.
SELECT id FROM .... WHERE '2015-03-09 10:00:00' BETWEEN DATE_IN AND DATE_OUT
...
Рейтинг: 0 / 0
Выборка по дате + любое время
    #39057186
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dok11Мне нужно узнать что диапазон дат уже занят и между ними нельзя ставть заезды. доктор, они на свет лезут! :)



PS.miksoftLumixсуществует ли какой-нибудь модификатор битвина, чтобы он был аналогом вот такой конструкции??Нет. Да и незачем.
http://programmers.stackexchange.com/questions/160191/why-is-sqls-between-inclusive-rather-than-half-open
QUESTION: Why is SQL's BETWEEN inclusive?

ANSWER: Because the SQL language designers made a poor design decision, in that they failed to deliver syntax that would allow developers to specify which of the 4 variants of BETWEEN (closed, semi-open-left, semi-open-right, or open) they'd prefer.

RECOMMENDATION: Unless/until the SQL standard is amended, don't use BETWEEN for dates/times . Instead get into the habit of coding DATE range comparisons as independent conditions on the start and end boundaries of your BETWEEN range. This is a bit verbose, but will leave you writing conditions that are intuitive (thus less likely to be buggy) and clear to the database optimizers, allowing for optimal execution plans to be determined and indexes to be used.

For example, if your query is accepting an input day specification and should return all records which fell on that date, you'd code as:
WHERE DATE_FIELD >= :dt AND DATE_FIELD < :dt+1

Trying to write the logic using BETWEEN risks performance issues and/or buggy code. Three common missteps:

1) WHERE DATE_FIELD BETWEEN :dt AND :dt+1

This is almost certainly a bug - user expects to see only records for a particular date, yet one day will wind up with a report containing records from 12:00 a.m. of the next day.

2) WHERE TRUNC(DATE_FIELD) = :dt

Gives right answer, but applying the function to DATE_FIELD will render most indexing / statistics useless (though sometimes DBAs will try to help by adding function-based indexes to the date fields - still burning up man-hours and disk space and adding overhead to IUD operations on the table)

3) WHERE EVENT_DATE BETWEEN :dt AND :dt + 1-1/24/60/60

Tom Kyte, Oracle guru extraordinaire, recommends this less-than-elegant (IMO) solution. Works great until you're spending all day to find that "1-1/24/06/60" in a query that gives incomplete results... or until you accidentally use it on a TIMESTAMP field. Plus, it's a bit proprietary; compatible with Oracle's DATE data type (which tracks to the second), but needs to be adjusted to the DATE/TIME precision of different database products.

SOLUTION: Petition the ANSI SQL committee to enhance the SQL language specs by modifying the BETWEEN syntax to support specification of alternatives to the CLOSED/INCLUSIVE default. Something like this would do the trick:

expr1 BETWEEN expr2 [ INCL[USIVE] | EXCL[USIVE] ] AND expr3 [ INCL[USIVE] | EXCL[USIVE] ]

Consider how easy it becomes to express WHERE DATE_FIELD BETWEEN :dt INCLUSIVE AND :dt+1 EXCLUSIVE (or just WHERE DATE_FIELD BETWEEN :dt AND :dt+1 EXCL)
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка по дате + любое время
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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