Даты (и метки времени) не имеют формата - они представлены внутри 7 или 8 байтами для даты или 20 байтами для метки времени.Единственный раз, когда они форматируются, либо когда пользовательский интерфейс, который вы используете, неявно преобразует, то он может отображать что-то значимое для пользователя (например, при отображении оператора SELECT
), либо когда пользователь явно преобразует его, используя TO_CHAR
.
Учитывая это, вам не нужно менять какой-либо формат;просто CAST
для другого типа данных:
SELECT CAST( your_timestamp_column AS DATE ) FROM your_table
Почему он отображает TIMESTAMP
с использованием 12-часовых часов и DATE
с использованием 24-часовых часов?
Потому что это то, что ваш пользовательский интерфейс имеет по умолчанию.
Для SQL / Plus и SQL Developer значения по умолчанию находятся в параметрах сеанса NLS пользователя:
SELECT parameter, value
FROM NLS_SESSION_PARAMETERS
WHERE parameter IN ( 'NLS_DATE_FORMAT', 'NLS_TIMESTAMP_FORMAT' );
Вы должны увидеть что-то вроде:
PARAMETER VALUE
-------------------- ---------------------------
NLS_DATE_FORMAT DD-MON-RR HH24:MI:SS
NLS_TIMESTAMP_FORMAT DD-MON-RR HH12:MI:SS.FF6 AM
Вы можете изменить их, используя:
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS';
ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS.FF9';
Если, например, вы хотели их обоих в формате ISO8601.