oracle 查找并转化字符串

oracle 如何将字段中不同字符串日期格式转换成指定日期格式,并更新此字段

使用to_date(“str”,“yyyy-mm-dd”)

字符串转换成日期格式
to_date('2017-12-10','yyyy-mm-dd')

to_date(“要转换的字符串”,”转换的格式”) 两个参数的格式必须匹配,否则会报错。
也不是只有这一种转换的格式

eg:to_char(sysdate,’yy-mm-dd hh24:mi:ss) 这里面的sysdate就是获取系统现在的时间 转换成17-11-26 11:17:42

日期变成字符串就用 to_char

to_char(日期,"转换格式" ) 即把给定的日期按照“转换格式”转换。希望可以帮助到你

 INSERT INTO TEST (TEST_DATE) VALUES ('2017-11-20 10:30:20');
SELECT * FROM TEST;
UPDATE SET TEST TEST_DATE=to_char(to_date(TEST_DATE,'YYYY-MM-DD HH24:MI:SS'),'YYYY:MM:DD');
SELECT * FROM TEST;

图片说明

to_date('时间,'格式')

to_date('时间,'格式')
TO_CHAR(number, '格式')

--转为字符型:
where to_char('date' ,'yyyy-mm-dd')='2017-11-26' ;
--转为日期型:
where to_date('2017-11-26' ,'yyyy-mm-dd')=date ;

to_date('时间,'格式')

怎么都是to_date 重点不是不同字符串吗?可以利用正则去筛选日期,再用to_date 转换

to_date('字符串','格式')

to_date('字符串','格式')
应该不止oracle,其他的sql好像都支持的吧

to_date('2017-12-10','yyyy-mm-dd')

请假大神,以下答案能解决大部分常用格式的转换了
create or replace

function FN_DATESTR(v_datestr in VARCHAR2) return VARCHAR2 is

results VARCHAR2(40); --正确格式的结果数据
le number(20); --数据长度
timeObj VARCHAR2(40); --用于保存拆分含有的时间
timeObj2 VARCHAR2(40);--用于临时保存保存拆分的日期
BEGIN
le :=length(v_datestr);
if (v_datestr is null OR nvl(trim(v_datestr),'-1')='-1') then

return null;
end if;
--只有日期,补上时间
if(8<=le and le<=11) then
results :=v_datestr||' 00:00:01';
results :=REGEXP_replace(results,'[年|月|日]','-');
return to_char(to_date(results,'yyyy-MM-dd HH24:mi:ss'),'yyyy-MM-dd HH24:mi:ss');
end if;
--含有日期、时间
if(11 --获取时间
timeObj :=substr(v_datestr,8);
timeObj2 :=substr(v_datestr,8);--临时保存数据,用于还原数据
--去掉时间中含有的字符串T
if(instr(timeObj,'T')>0) then
timeObj:=replace(timeObj,'T',' ');
end if;
--去掉时间中的毫秒
if(instr(timeObj,'.')>0)then
timeObj:=substr(timeObj,0,instr(timeObj,'.')-1);
end if;
results :=replace(v_datestr,timeObj2,timeObj);
results :=REGEXP_replace(results,'[年|月|日]','-');
return to_char(to_date(results,'yyyy-MM-dd HH24:mi:ss'),'yyyy-MM-dd HH24:mi:ss');
end if;
return null;

end;