2016-08-15 6 views
0

Проделали большой поиск, прежде чем задавать этот вопрос, например How to convert a string into date format, How to convert a string into date, но все еще не могут понять это.Oracle: как преобразовать строку в формат даты

Итак, вот вопрос о том, как преобразовать эти даты строки в дату в Oracle:

"2016-08-15 10:45:30" (тип String) -> 20160815 (Дата тип)

"20160815104530" (тип String) -> 20160815 (тип Дата)

Любая идея будет оценена.

+0

Вы хотите сохранить временные порты? Потому что тип DATE Oracle поддерживает дату + время. – sstan

+0

Я также должен упомянуть, что сообщения, с которыми вы связаны, не предназначены для Oracle. Вы не можете рассчитывать найти полезную для Oracle информацию в сообщениях для SQL Server или Excel. И почему бы не пойти в источник так или иначе? [Официальная документация TO_DATE] (https://docs.oracle.com/database/121/SQLRF/functions219.htm#SQLRF06132) – sstan

+0

Я просто хочу получить дату, нет необходимости в дополнительных полях времени – triffic

ответ

1

Вы смешиваете две вещи здесь:

Первое преобразование типа данных строки в Oracle VARCHAR2 в тип DATE данных. Тип данных DATE имеет точность секунд, вы не можете это изменить. Тип DATE данные всегда будут давать вам дату и время компонент, то есть год, месяц, день, часы, минуты и секунды: Oracle SQL Data Type Documentation

Однако вторая часть того, что вы спрашиваете о том, как отформатировать дату, когда извлекаться. Это полезно при запуске отчетов или других видов визуального отображения дат. Например, в США вы, скорее всего, хотите, чтобы ваши столбцы даты отображались в формате MM/DD/YYYY, а во всем мире в мире вы, скорее всего, захотите придерживаться DD/MM/YYYY. Oracle позволяет это сделать, сообщив, что вы используете NLS_DATE_FORMAT. Вы можете установить этот параметр для каждого отдельного сеанса, а также на уровне базы данных, вам решать (и ваш администратор базы данных) решать, где и когда вы хотите установить это. В вашем случае вы можете применить это с помощью команды ALTER SESSION:

SQL> ALTER SESSION SET nls_date_format='YYYY-MM-DD'; 

Session altered. 

SQL> SELECT TO_DATE('2016-08-15 10:45:30', 'YYYY-MM-DD HH24:MI:SS') FROM DUAL; 

TO_DATE(
---------- 
2016-08-15 

SQL> SELECT TO_DATE('20160815104530', 'YYYYMMDDHH24MISS') FROM DUAL; 

TO_DATE(
---------- 
2016-08-15 
+0

Спасибо, это совершенно ясно для меня. – triffic

1

Вы используете to_date():

select to_date(substr(str1, 1, 10), 'YYYY-MM-DD') 
select to_date(substr(str2, 1, 8), 'YYYYMMDD') 
+0

Спасибо, но это показывает: ' 2016-08-15 00: 00: 00 'when execute' select to_date (substr (str2, 1, 8), 'YYYYMMDD') ', как я могу просто получить дату в соответствии с форматом' YYYYMMDD'? – triffic

+0

@triffic. , Используйте 'to_char()'. В Oracle тип 'date' также включает время. –

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