从Oracle中的字符串串联填充日期时发生错误

时间:2018-12-28 02:55:02

标签: sql oracle concatenation

我有一个声明: 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"

当留下外部引号时,我有相同的意思。这是带引号的东西,我在许多其他重复的线程中都读过,但仍然不知道如何引号。他吗?

“ idate”列为VARCHAR2(50): b'02042015' b'01032015' b'01202015' b'01102015'

3 个答案:

答案 0 :(得分:3)

我不知道为什么你需要使事情变得如此复杂:

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

您不需要使用所有的字符串操作。只需使用适当的格式掩码调用一次TO_DATE

答案 1 :(得分:1)

您宁愿要UPDATE,而不要INSERT

UPDATE heal
       SET cdate = to_date(substr(idate, 7, 4) || '/' || substr(idate, 3, 2) || '/' || substr(idate, 5, 2), 'YYYY/MM/DD');

答案 2 :(得分:1)

这是执行此操作的一种方法。我展示了一个完整的演示,首先是创建表,然后填充数据(在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