Форум программистов, компьютерный форум, киберфорум
Oracle
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.52/21: Рейтинг темы: голосов - 21, средняя оценка - 4.52
1 / 1 / 1
Регистрация: 01.12.2015
Сообщений: 58
1

Поиск по дате

10.02.2016, 08:56. Показов 4262. Ответов 17
Метки нет (Все метки)

Очень дурацкий вопрос и я не знаю, что произошло, ибо раньше все работало. Суть такая:
Есть поле reg_date типа date в таблице Orders
Есть ряд данных, скрин прилагаю.
Не могу сформировать запрос, который бы искал по дате
Запрос у меня такой SELECT * FROM Orders WHERE reg_date = TO_DATE('09.02.16','DD-MM-YY')
Запрос выводит пустоту
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Миниатюры
Поиск по дате  
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.02.2016, 08:56
Ответы с готовыми решениями:

Поиск по дате
Добрый день!! Не подскажите как организовать поиск по дате. Код пишу следующий: procedure...

Поиск по дате?
Здравствуйте, появилась проблема: нужно найти данные с одной даты по другую, тоесть которые были...

Поиск по дате
Здравствуйте, помогите сделать поиск по нескольким полям включая дату. Сейчас делаю так select...

Поиск по дате
Как организовать поиск по дате если на форме используется DateTimePicker ? Мне нужно найти...

17
759 / 660 / 195
Регистрация: 24.11.2015
Сообщений: 2,160
10.02.2016, 09:21 2
Я пока вижу два варианта
1) В таблице поле reg_date имеет тип не DATE, а, все-таки, VARCHAR2 . Если кто-то где-то изменил настройки NLS, то теперь запрос, приведенный в теме может ничего не вернуть. Сам с таким сталкивался.
2) Проверить содержимое таблицы таким запросом: SELECT to_char(reg_date, 'DD.MM.YYYY') FROM Orders WHERE rownum<1000 . Подозрение следующее: Поскольку использовался формат 'DD-MM-YY', в базу записываются не 2000-е годы, а 1900-е, либо даже 1000-е годы. Поэтому, опять же при изменении каких-то NLS настроек, теперь даты перестали определяться.
0
Модератор
3881 / 2857 / 546
Регистрация: 21.01.2011
Сообщений: 12,375
10.02.2016, 09:37 3
Цитата Сообщение от Creepy Посмотреть сообщение
TO_DATE('09.02.16','DD-MM-YY')
Кто в запросе мешает указывать 4 цифры года, а не 2 ?
0
1 / 1 / 1
Регистрация: 01.12.2015
Сообщений: 58
10.02.2016, 09:45  [ТС] 4
Прикрепил результат запроса и скрин типа reg_date
0
Миниатюры
Поиск по дате   Поиск по дате  
1 / 1 / 1
Регистрация: 01.12.2015
Сообщений: 58
10.02.2016, 09:46  [ТС] 5
Указывал и 4, сути не меняло
0
759 / 660 / 195
Регистрация: 24.11.2015
Сообщений: 2,160
10.02.2016, 09:50 6
Теперь попробуйте
SQL
1
SELECT * FROM Orders WHERE reg_date = TO_DATE('09.02.2016','DD.MM.YYYY')
Точки вместо "-"
0
1 / 1 / 1
Регистрация: 01.12.2015
Сообщений: 58
10.02.2016, 09:58  [ТС] 7
Точки и использовались)
Замена на "-" не помогла
0
759 / 660 / 195
Регистрация: 24.11.2015
Сообщений: 2,160
10.02.2016, 10:07 8
Цитата Сообщение от Creepy Посмотреть сообщение
Замена на "-" не помогла
???
Это описка, или как?
Можно картинку? Мой селект с результатом. Как в одном из предыдущих постов.

Добавлено через 1 минуту
У Вас в шаблоне использовались "-".
Цитата Сообщение от Creepy Посмотреть сообщение
SELECT * FROM Orders WHERE reg_date = TO_DATE('09.02.16','DD-MM-YY')
Я предлагал везде точки поставить
0
Модератор
3881 / 2857 / 546
Регистрация: 21.01.2011
Сообщений: 12,375
10.02.2016, 10:09 9
Если reg_date с ненулевым временем, то
SQL
1
WHERE TRUNC(reg_date) = TO_DATE('09.02.16','DD.MM.YY')
1
105 / 49 / 26
Регистрация: 01.09.2014
Сообщений: 140
10.02.2016, 10:09 10
SQL
1
SELECT * FROM Orders WHERE trunc(reg_date,'DD') = TO_DATE('09.02.16','DD-MM-YY')
1
759 / 660 / 195
Регистрация: 24.11.2015
Сообщений: 2,160
10.02.2016, 10:10 11
Кстати, попробуйте еще вот так
SQL
1
SELECT * FROM Orders WHERE trunc(reg_date) = TO_DATE('09.02.2016','DD.MM.YYYY')
1
Модератор
3881 / 2857 / 546
Регистрация: 21.01.2011
Сообщений: 12,375
10.02.2016, 10:11 12
2
1 / 1 / 1
Регистрация: 01.12.2015
Сообщений: 58
10.02.2016, 10:19  [ТС] 13
Забыл про свой шаблон, просто в developer'e я перепробывал все в-ты. С точками тоже ничего не выводит

Добавлено через 28 секунд
А вот это помогло)
Как и все следующие в-ты))
Спасибо!
Только я так и не понял, зачем нужен trunc
0
759 / 660 / 195
Регистрация: 24.11.2015
Сообщений: 2,160
10.02.2016, 10:21 14
Цитата Сообщение от Creepy Посмотреть сообщение
А вот это помогло

Странно... Как же до этого работало?
0
Модератор
3881 / 2857 / 546
Регистрация: 21.01.2011
Сообщений: 12,375
10.02.2016, 10:24 15
Цитата Сообщение от Creepy Посмотреть сообщение
зачем нужен trunc
Обрезает время (если он без параметров).
SQL
1
2
SELECT to_char(reg_date, 'dd.mm.yyyy hh24:mi:ss'),
       to_char(reg_date, 'dd.mm.yyyy')                -- смотри разницу
1
105 / 49 / 26
Регистрация: 01.09.2014
Сообщений: 140
10.02.2016, 10:25 16
SQL
1
SELECT to_char(reg_date, 'dd.mm.yyyy hh24:mi:ss') v1, to_char(trunc(reg_date), 'dd.mm.yyyy hh24:mi:ss') v2 FROM Orders WHERE rownum<1000
чует мое сердце этот запрос прольет истину )
0
1 / 1 / 1
Регистрация: 01.12.2015
Сообщений: 58
10.02.2016, 10:30  [ТС] 17
Элементарно))
Я просто до этого заносил в бд данные в другом формате даты без времени. И забыл про это.

Добавлено через 1 минуту
И он пролил, спасибо)
0
759 / 660 / 195
Регистрация: 24.11.2015
Сообщений: 2,160
10.02.2016, 10:31 18
Цитата Сообщение от Creepy Посмотреть сообщение
Только я так и не понял, зачем нужен trunc
Если дата почему-либо записывается с часами-минутами-секундами, то шаблон TO_DATE('09.02.2016','DD.MM.YYYY') дает часы-минуты-секунды равными нулю. Функция trunc или trunc(... , 'DD') обрезает с точностью до дня, то есть обнуляет часы-минуты-секунды.
Попробуйте SELECT to_char(reg_date, 'DD.MM.YYYY HH24:MI:SS') FROM Orders WHERE rownum<1000, чтобы увидеть полное содержимое
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.02.2016, 10:31

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Поиск в БД по дате
Делаю запрос таким образом: ADOQuery1-&gt;Close(); ADOQuery1-&gt;SQL-&gt;Clear();...

Поиск по дате в БД
В базе данных в столбце dateFilm хранится дата фильма(dd.MM.yyyy) тип long,полученная методом...

Поиск по дате
Как правильно выглядит синтаксис: например Найти данные 2011 года? select *from t1 where...

Поиск по дате
у меня есть табличка с разными датами так вот как осуществить поиск по дате что бы показывало...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.