Подтвердить что ты не робот

Ошибка SQL: ORA-01861: литерал не соответствует строке формата 01861

Я пытаюсь вставить данные в существующую таблицу и продолжать получать ошибку.

INSERT INTO Patient  
(
  PatientNo,
  PatientFirstName,
  PatientLastName,
  PatientStreetAddress,
  PatientTown,
  PatientCounty,
  PatientPostcode,
  DOB,
  Gender,
  PatientHomeTelephoneNumber,
  PatientMobileTelephoneNumber
)
VALUES 
(
  121, 
  'Miles', 
  'Malone', 
  '64 Zoo Lane', 
  'Clapham', 
  'United Kingdom',
  'SW4 9LP',
  '1989-12-09',
  'M',
  02086950291,
  07498635200
);

Ошибка:

Error starting at line : 1 in command -
INSERT INTO Patient (PatientNo,PatientFirstName,PatientLastName,PatientStreetAddress,PatientTown,PatientCounty,PatientPostcode,DOB,Gender,PatientHomeTelephoneNumber,PatientMobileTelephoneNumber)
VALUES (121, 'Miles', 'Malone', '64 Zoo Lane', 'Clapham', 'United Kingdom','SW4 9LP','1989-12-09','M',02086950291,07498635200)
Error report -
SQL Error: ORA-01861: literal does not match format string
01861. 00000 -  "literal does not match format string"
*Cause:    Literals in the input must be the same length as literals in
           the format string (with the exception of leading whitespace).  If the
           "FX" modifier has been toggled on, the literal must match exactly,
           with no extra whitespace.
*Action:   Correct the format string to match the literal.

Просто не знаю, почему это продолжается. Я изучаю SQL на данный момент, любая помощь будет принята с благодарностью!

4b9b3361

Ответ 1

Попробуйте заменить строковый литерал на дату '1989-12-09' на TO_DATE('1989-12-09','YYYY-MM-DD')

Ответ 2

Формат, который вы используете для даты, не соответствует формату даты Oracle по умолчанию.

При установке Oracle Database по умолчанию для ФОРМАТА ДАТЫ ПО УМОЛЧАНИЮ устанавливается значение dd-MMM-yyyy.

Либо используйте функцию TO_DATE(dateStr, formatStr), либо просто используйте dd-MMM-yyyy модель формата даты.

Ответ 3

Вы также можете изменить формат даты для сеанса. Это полезно, например, в Perl DBI, где функция to_date() недоступна:

ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD'

Вы также можете установить стандартный файл nls_date_format по умолчанию:

ALTER SYSTEM SET NLS_DATE_FORMAT='YYYY-MM-DD'

В Perl DBI вы можете запускать эти команды с помощью метода do():

$db->do("ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD');

http://www.dba-oracle.com/t_dbi_interface1.htm https://community.oracle.com/thread/682596?start=15&tstart=0

Ответ 4

"SELECT ci.PARTY_NAME, sm.DC_No,ic.DC_DATE, sm.bill_no,sr.sales_DATE,sum(sm.QTY), 'Buyer' as issue_type  " +
        " FROM   sales_register sr,customer_issue ci join ( SELECT ISSUE_DATE AS DC_DATE,issue_id FROM ISSUE UNION  SELECT ISSUE_DATE,issue_id AS DC_DATE FROM CUSTOMER_ISSUE) IC on ic.issue_id=ci.issue_id " +
        " join sales_mat_reg sm on ic.issue_id=sm.issue_id where ic.DC_DATE between  to_date('"+from_date+"','DD-MON-YY') " +
         " and  to_date('"+to_date+"','DD-MON-YY')  group by ci.PARTY_NAME, sm.DC_No, sm.bill_no, ic.DC_DATE, sr.sales_DATE,issue_type 
 literal does not match format string

Ответ 5

попытайтесь сохранить дату, подобную этой yyyy-mm-dd hh: mm: ss.ms например: 1992-07-01 00: 00: 00.0 который работал у меня

Ответ 6

ORA-01861: literal does not match format string

Это происходит потому, что вы пытались ввести литерал со строкой форматирования, но длина строки форматирования не была такой же, как у литерала.

Вы можете решить эту проблему, выполнив следующие изменения.

TO_DATE('1989-12-09','YYYY-MM-DD')

Как правило, если вы используете функцию TO_DATE, TO_TIMESTAMP функция, функция TO_CHAR и аналогичные функции, убедитесь, что предоставленный вами литерал соответствует строке формата, которую вы указанный

Ответ 7

Попробуйте использовать формат dd-mon-yyyy, например 02-08-2016 должен быть в формате '08 -feb-2016 '.

Ответ 8

Если вы предоставили правильный формат даты, он должен работать, пожалуйста, повторите проверку один раз, если вы дали правильный формат даты в значениях вставки