2015-05-29 6 views
2

Я использую oracle в качестве моей базы данных, у меня есть столбец taskdate как TIMESTAMP. сохраненный в базе данных 29.05.2010 10: 27: 04.000000 AM. могу ли я преобразовать его в 2015-05-29 этот формат, когда я его извлекаю?получить дату из базы данных как другой формат

+0

Любит ** формат ** отметка времени или ** TRUNC времени части * *? –

ответ

2

формат его сохранения в базе данных 5/29/2015 10: 27: 04,000000 AM

Дата/отметки времени не имеет формат. Oracle не сохраняет дату/временные метки в формате, который вы видите. Формат, который вы видите, только для дисплей цель. Дата внутренне хранится в 7 байтах, который является запатентованным форматом Oracle.

Можно ли преобразовать его в 2015-05-29 этот формат, когда я его извлечу?

Для отображения:

Вы должны использовать TO_CHAR вместе с желанной формата модели отобразить в нужном формате.

Например,

SQL> SELECT SYSTIMESTAMP, TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD') my_tmstmp FROM DUAL; 

SYSTIMESTAMP        MY_TMSTMP 
---------------------------------------- ---------- 
29-MAY-15 11.40.25.054000 AM +05:30  2015-05-29 

SQL> 

Для финиковой арифметики:

Для арифметики дат вы должны оставить тип данные,, как дата сами. Вы можете использовать TRUNC усечь время части и оставляя только часть даты:

Например,

SQL> alter session set nls_date_format='YYYY-MM-DD'; 

Session altered. 

SQL> SELECT SYSTIMESTAMP, TRUNC(SYSTIMESTAMP) my_tmstmp FROM DUAL; 

SYSTIMESTAMP        MY_TMSTMP 
---------------------------------------- ---------- 
29-MAY-15 11.42.41.255000 AM +05:30  2015-05-29 

SQL> 
1

Конечно, вы можете. Вы можете использовать «cast .. as date» для преобразования значения на дату, а затем trunc it (в случае, если вы хотите оставить формат в качестве даты) или использовать to_char (если хотите значение как символ). Окончательные выражения для обоих вариантов может быть что-то вроде этого:

SELECT TRUNC(CAST(column AS DATE)) FROM your_table... 

или

SELECT TO_CHAR(column, 'yyyy-mm-dd') FROM your_table... 
+0

Не нужно явно указывать метку времени. На временной отметке было бы отлично. –

+0

@LalitKumarB, на самом деле это зависит от версии базы данных. В новых версиях TIMESTAMP неявно отбрасывается в DATE, а затем усекается, поэтому вы можете использовать TRUNC (TIMESTAMP) – BitLord

+0

. Еще в версии 9.2.0.1 и более поздних версиях можно было выполнить неявное преобразование. Во всяком случае, под капотом Oracle делает то же самое, 'cast timestamp as date '. https://community.oracle.com/thread/374457 –

Смежные вопросы