在我的情况下,如何格式化SQL的结果?

时间:2015-05-11 08:36:42

标签: sql oracle

这是表格 -

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');

4 个答案:

答案 0 :(得分:2)

您可以使用regexp_replace格式化复杂表达式:

select regexp_replace(time, 
  '^[[:space:]]*([[:digit:]]{1,2}:[[:digit:]]{1,2})[[:space:]]*([aApP][mM]).*$', 
  '\1 \2') from tmp;

SQL小提琴:http://sqlfiddle.com/#!4/ba037f/2

答案 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 查询符合以下模式:

  1. ([[:digit:]]{1,2})
  2. (:)
  3. ([[:digit:]]{1,2})
  4. ([[:alpha:]]{2})
  5. 每组括号都是一种模式。因此,您可以看到模式已替换为'\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),' ')));