Когда вы сказали,
Это хранится в базе данных оракула, как sysdate.
Мне говорят, что тип столбца - ДАТА.
Для начала давайте отвергнем представление о том, что DATE хранится в строковом формате в Oracle. Это совершенно ошибочно.
Если тип данных столбца - DATE, то фактическое значение сохраняется с использованием 7 байтов, но его можно рассматривать как число. Тот факт, что когда вы запрашиваете его для проверки значения, вы видите формат dd-mon-yy, является функцией настроек NLS или параметров клиента. Помните, что Oracle - это сервер, любой инструмент, который позволяет вам просматривать информацию, хранящуюся на этом портале. Другими словами, вы на самом деле не смотрите на данные, вы смотрите на то, что пошло и получило данные, а затем поместило их на экран, чтобы вы могли их увидеть. имеет смысл?
Хорошо, теперь, когда вы знаете, что DATE хранится в определенном формате, не существует, DATE MATH становится простым.
SELECT Submission_date FROM tab
Возвращает дату, отформатированную в виде строки на основе настроек клиента или настроек NLS.
SELECT Submission_date - 1 FROM tab
Возвращает дату, совпадающую с днем, на один день раньше
Обратите внимание, что мне не нужно было делать сумасшедшие вещи с номером 1, чтобы выполнить математику даты, и это потому, что тип данных даты поддерживает математическую обработку, которая работает так, как будто это число, поэтому вычитание - простая вещь.
Если ваши переменные $ begin_date передаются в Oracle как даты, то им тоже ничего не нужно делать, потому что, опять же, их можно использовать как числа.
WHERE Submission_date МЕЖДУ $ Begin AND $ End будет работать.
Бонусный материал
МЕЖДУ включительно на обоих концах.
Больше бонусов
Дата на самом деле хранится так:
Byte 1 -> Century
Byte 2 -> Year
Byte 3 -> Month
Byte 4 -> Day
Byte 5 -> Hour
Byte 6 -> Minute
Byte 7 -> Second
Это позволяет поддерживать очень широкий диапазон дат. Это действительно математическая библиотека дат, которая может заставить этот тип данных делать классные вещи, такие как добавлять високосные годы и получать преобразование из юлианского в григорианский и тому подобное.
Бонусный материал Redux
SQL Server хранит даты в виде двух 4-байтовых целых чисел, упакованных вместе в BINARY (8). Первые 4 байта - это прошедшие дни с базовой даты SQL Server 01.01.1900. Вторые 4 байта хранят время суток, представленное числом миллисекунд после полуночи, в квантах 3,33 миллисекунды.
Ошибочно полагать, что, если значение может быть сохранено, СУБД поддерживает его. Я полагаю, что SQL Server вообще не обрабатывает даты BC и не хорошо обрабатывает даты в будущем, как в 9999. MSSS2008 действительно представил новый тип данных для работы с этими большими датами.