Хорошо, я думаю, что у меня есть ты.Вы хотите сделать следующее?
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
Это делает намного более очевидным, что происходит, и нет никакой двусмысленности в том, что означает <
в этой ситуации.поскольку дата всегда будет меньше будущей, что не обязательно относится к строкам.
Надеюсь, это имеет смысл.