Ошибки при заполнении дат из конкатенации строк в Oracle - PullRequest
0 голосов
/ 28 декабря 2018

У меня есть утверждение: SELECT ('"' || TO_DATE(substr(idate,7,4) || '/' || substr(idate,3,2) || '/' || substr(idate,5,2), 'YYYY/MM/DD') || '"') FROM heal;

, которое выводит "15/02/04" "15/01/03" "15/01/20" "15/01/10"

Но я создал столбец из этого запроса, чтобы заполнить его как DATE (ALTER TABLE heal ADD (CDATE DATE);)

При вставке INSERT INTO heal (cdate) VALUES ('"' || TO_DATE(substr(idate,7,4) || '/' || substr(idate,3,2) || '/' || substr(idate,5,2), 'YYYY/MM/DD') || '"'); я получаю сообщение об ошибке: 00984. 00000 - "column not allowed here"

При выходе из кавычек у меня то же самое.Это что-то с цитатами, которые я читал во многих других дублированных темах, но все еще не знаю, как это процитировать.Любой столбец he; p?

'idate' как VARCHAR2 (50): b'02042015' b'01032015' b'01202015' b'01102015'

Ответы [ 3 ]

0 голосов
/ 28 декабря 2018

Я не знаю, почему вам нужно все усложнить:

UPDATE heal
SET cdate = TO_DATE(SUBSTR(idate, 3, 8), 'DDMMYYYY');

Вам не нужно использовать все эти манипуляции со строками.Просто позвоните TO_DATE один раз с правильной маской формата.

0 голосов
/ 28 декабря 2018

Вот один из способов сделать это.Я показываю полную демонстрацию, начиная с создания таблицы, заполняя данные (NULL в столбце CDATE), затем оператор UPDATE.Обратите внимание на использование «шаблонного текста» в модели формата на TO_DATE и использование синтаксиса q-кавычек для определения строк, содержащих одинарные кавычки в качестве буквенных символов.

В конечном выводе CDATE использует параметр NLS_DATE_FORMAT моей текущей сессии;даты могут отличаться в вашей системе.

create table heal (idate varchar2(50), cdate date);

insert into heal (idate)
  select q'[b'02042015']' from dual union all
  select q'[b'01032015']' from dual union all
  select q'[b'01202015']' from dual union all
  select q'[b'01102015']' from dual;

select * from heal;

IDATE                          CDATE                     
------------------------------ --------------------------
b'02042015'                                                                  
b'01032015'                                                                  
b'01202015'                                                                  
b'01102015'

update heal
  set cdate = to_date(idate, q'["b'"mmddyyyy"'"]');


4 rows updated.

select * from heal;

IDATE                          CDATE              
------------------------------ -------------------
b'02042015'                    2015/02/04 00:00:00
b'01032015'                    2015/01/03 00:00:00
b'01202015'                    2015/01/20 00:00:00
b'01102015'                    2015/01/10 00:00:00
0 голосов
/ 28 декабря 2018

Вы скорее хотите UPDATE, а не INSERT.

UPDATE heal
       SET cdate = to_date(substr(idate, 7, 4) || '/' || substr(idate, 3, 2) || '/' || substr(idate, 5, 2), 'YYYY/MM/DD');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...