Сравнение даты и времени из двойной таблицы - PullRequest
0 голосов
/ 22 февраля 2012

У меня есть два столбца state_date и state_time

Я хочу получить записи из базы данных, используя столбцы state_date и state_time.State_date и state_time должны быть меньше или равны ниже sql. Ниже sql указаны дата и время. Но у меня есть отдельные столбцы, один из которых имеет дату, а другой - время Сначала я хочу сравнить дату и время. Как я могу изменить приведенный ниже запрос, чтобы получить дату и время отдельно с миллисекундами.

select decode(TRIM(to_char(SYSDATE,'Day')),'Monday','3','1') from dual

Пример данных:

таблица заказов:

order id   order name  order date
1          pizza       20-feb-2012
2          burger      17-feb-2012

таблица order_state

order id     order_state     order_date                order_time
1             initiated      20-feb-2012               12:29:11:203
1             processed      21-feb-2012               12:29:12:112
1             cancelled      21-feb-2012               12:29:11:311

Так что здесь я хочу получить самую последнюю запись, то есть отмененную на основе order_date и order_time, order_id и today date.if я запрашиваю сегодня в 12: 29: 10: 311 или 12: 29: 11: 310.i хочу получить отмененная запись.

Спасибо

Chaitu

1 Ответ

2 голосов
/ 22 февраля 2012

Хорошо, я думаю, что у меня есть ты.Вы хотите сделать следующее?

select <columns>
  from my_table
 where state_date <= <some date>
   and state_time <= <some time>

Забота о миллисекундах довольно необычна, но если вы это сделаете, вы должны использовать systimestamp.

Судя по тому, что вы разбилидата и время, это символы, поэтому мне нужно угадать маски формата .Если они не правы, ссылка должна указывать, что делать.Кстати, не стоит разделять дату таким образом.Вы можете создать столбец, используя тип данных timestamp в своей таблице, что сделает вашу проблему чрезвычайно простой.

Итак, я не знаю, почему вы выбрали формат 'Day' для своегозапрос, но с этим <some date> становится to_char(sysdate, 'DAY').


Из вашего комментария ниже <some date> будет to_char(sysdate, 'DD-MON-YY')


<some time> будет to_char(systimestamp,'HH24:MI:SS:FF3'), что даст вам метку времени в миллисекундах, хотя тип данных может переходить в микросекунды.

Мне кажется немного странным, но ваш запрос станет:

select <columns>
  from my_table
 where state_date <= to_char(sysdate, 'DD-MON-YY')
   and state_time <= to_char(systimestamp,'HH24:MI:SS:FF3')

Если хранить дату в виде строки, было бы более нормально хранить ее в формате yyyymmdd, чтобы, по крайней мере, вы могли гарантировать, что она в порядке.Если вы сделали что-то подобное, просто измените маску формата.Если вы этого не сделаете, то эти запросы не будут работать как задумано.


Лично, если у вас есть для хранения данных таким образом, и предполагается, что state_date сохраняется как, скажем, dd-mon-yy, то есть включает год, месяц И день и state_time хранится как указано выше, тогда я бы сделал что-то вроде этого:

select <columns>
  from my_table
 where to_timestamp(state_date || state_time, 'DD-MON-YYHH24:MI:SS:FF3')
        <= systimestamp

Это делает намного более очевидным, что происходит, и нет никакой двусмысленности в том, что означает < в этой ситуации.поскольку дата всегда будет меньше будущей, что не обязательно относится к строкам.

Надеюсь, это имеет смысл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...