我有一个声明:
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'
答案 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