这是表格 -
time
______
2:00 am
1:05 PM
12:00 Pm
11:10pM
以下是结果的样子 -
time
______
2:00 am
1:05 PM
12:00 Pm
11:10 pM
我该怎么做?
如果您想尝试 -
create table tmp (
time varchar2(50)
);
insert into tmp values (' 2:00 am');
insert into tmp values ('1:05 PM');
insert into tmp values (' 12:00 Pm');
insert into tmp values (' 11:10pM');
答案 0 :(得分:2)
您可以使用regexp_replace
格式化复杂表达式:
select regexp_replace(time,
'^[[:space:]]*([[:digit:]]{1,2}:[[:digit:]]{1,2})[[:space:]]*([aApP][mM]).*$',
'\1 \2') from tmp;
答案 1 :(得分:1)
您可以使用 REGEXP_REPLACE 将数据修改为所需的模式。
例如,
SQL> SELECT TIME,
2 regexp_replace(trim(' ' FROM TIME),
3 '^([[:digit:]]{1,2})(:)([[:digit:]]{1,2})[[:space:]]*([[:alpha:]]{2})$',
4 '\1\2\3 \4') str
5 FROM tmp;
TIME STR
--------------- ----------
2:00 am 2:00 am
1:05 PM 1:05 PM
12:00 Pm 12:00 Pm
11:10pM 11:10 pM
以上 REGEXP_REPLACE 查询符合以下模式:
([[:digit:]]{1,2})
(:)
([[:digit:]]{1,2})
([[:alpha:]]{2})
每组括号都是一种模式。因此,您可以看到模式已替换为'\1\2\3 \4'
。这意味着,模式1,2,3在一起,后跟一个空格和十个模式4.
答案 2 :(得分:0)
因为您有多种类型的情况' pm'我已经用它了。
SQL> select * from tmp;
TIME
--------------------------------------------------
2:00 am
1:05 PM
12:00 Pm
11:10pM
SQL> select (case substr(time,length(time)-1)
2 when
3 'am' then trim(REPLACE(time, 'am',' am'))
4 when
5 'PM' then trim(REPLACE(time, 'PM',' PM'))
6 when
7 'Pm' then trim(REPLACE(time, ' Pm','Pm'))
8 when
9 'pM' then trim(REPLACE(time, 'pM',' pM'))
10 end) as "time"
11 from tmp;
time
--------------------------------------------------------------------------------
2:00 am
1:05 PM
12:00 Pm
11:10 pM
SQL>
答案 3 :(得分:0)
您可以通过oracle函数执行此操作,但它看起来像复杂的查询:
insert into tmp values(concat(concat(substr((replace('YourStringDateForInsert',' ','')),0,5),' '),concat(substr((replace('YourStringDateForInsert',' ','')),6,7),' ')));