Perl и Oracle DB - помощь - PullRequest
       1

Perl и Oracle DB - помощь

1 голос
/ 02 июля 2011

Я использую базу данных Oracle Express, и я хотел бы знать, как я могу изменить форматирование даты - с дд-мм-гггг на дд-мм-гггг чч-мм.Кроме того, я слышал кое-что о alter session, но я не знаю, как использовать это в Perl.

Это то, что я делал до сих пор:

my $sth = $dbh->prepare("INSERT INTO Perl 
                           (A_FIELD,B_FIELD,C_FIELD,TIME_STAME) 
                         VALUES 
                           (?,?,?,TO_DATE(?,'DD/MM/YYYY HH24:MI'))");

Ответы [ 2 ]

3 голосов
/ 02 июля 2011

Поля даты в Oracle не отформатированы для отображения - это внутренний формат , который вы конвертируете в / из при вводе / выводе.Когда вы сохраняете дату в столбцах типов данных Oracle, вы преобразуете свою строку символов во внутренний формат, описывая дату-время для функции TO_DATE со строкой модель модели .Oracle интерпретирует символьную строку в ее внутренний формат.Когда вам нужно отобразить дату, вы делаете наоборот - вы говорите оракулу, как отобразить дату, снова предоставив модель формата, на этот раз функции TO_CHAR.

Чтобы проиллюстрировать на вашем примере, вы можете преобразоватьот дд-мм-гггг до дд-мм-гггг чч-мм без сохранения значения (я предполагаю, что вы хотели отобразить часы-минуты. Формат формата минут - «MI», поскольку «ММ» - месяц):

SQL> SELECT TO_CHAR(TO_DATE('01-01-2020','DD-MM-YYYY'),'DD-MM-YYYY HH-MI') mydate
      FROM DUAL;

MYDATE
----------------
01-01-2020 12-00

Обратите внимание, что в вашем примере временная часть вашей даты не указывается при вводе, поэтому по умолчанию используется полночь.Чтобы сохранить значение времени в столбце даты, вы должны указать значение времени во входных данных:

SQL> SELECT TO_CHAR(TO_DATE('01/01/2020 10:13','DD/MM/YYYY HH:MI'),'DD-MM-YYYY HH-MI') mydate
        FROM DUAL;

MYDATE
----------------
01-01-2020 10-13

SQL>

В зависимости от того, что вы пытаетесь сделать, системную дату в Oracle можно получить по ссылке.на псевдостолбец SYSDATE:

SQL> SELECT TO_CHAR(sysdate,'MM/DD/YYYY HH:MI:SS AM') dt1,
  2         TO_CHAR(sysdate,'DD-MON-YYYY HH24:MI:SS') dt2
  3    FROM dual;

DT1                    DT2
---------------------- -----------------------------
07/01/2011 03:44:30 PM 01-JUL-2011 15:44:30

SQL>

Итак, окольный ответ на ваш вопрос в том, что он полностью зависит от того, в каком формате находится ваша входная строка даты. Вы конвертируете это в тип даты Oracle с помощью модели форматирования ифункцию TO_DATE, затем преобразуйте элемент даты в формат отображения по вашему выбору через TO_CHAR и модель формата.Что касается команды «ALTER SESSION», на которую вы ссылались в своем вопросе, вы можете указать модель формата по умолчанию для преобразования дат, указав параметр NLS_DATE_FORMAT в команде ALTER SESSION:

SQL> SELECT sysdate FROM dual;

SYSDATE
---------
02-JUL-11

SQL> ALTER SESSION SET nls_date_format='dd-mon-yyyy hh24:mi:ss';

Session altered.

SQL> SELECT sysdate FROM dual;

SYSDATE
--------------------
02-jul-2011 10:39:24
0 голосов
/ 02 июля 2011

Если входящая строка даты имеет формат мм-гггг, то вы можете использовать приведенную ниже инструкцию (TO_DATE(?,'MM-YYYY')) для преобразования строки в дату:

$sth = $dbh->prepare("INSERT INTO Perl (A_FIELD,B_FIELD,C_FIELD,TIME_STAME) VALUES (?,?,?,TO_DATE(?,'MM-YYYY'))");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...