在oracle中

时间:2018-03-13 12:07:06

标签: sql oracle oracle11g oracle10g

我有一个表格ABC和列A,其中很少有值.0,我想删除所有这些值中的.0。此列中的一些值也是字符串值,因此无法对值使用trunc。所以,请通过oracle 10g11g告诉我如何执行此操作。

3 个答案:

答案 0 :(得分:1)

一些老式功能(如SUBSTR和TRIM,如果有必要)可能会有所帮助。

SQL> with test (col) as
  2    (select '2.0'    from dual union
  3     select '3.20'   from dual union
  4     select '150.02' from dual union
  5     select 'ABAC.0' from dual union
  6     select 'DEF'    from dual union
  7     select '12345'  from dual union
  8     select '12.0 '  from dual
  9    )
 10  select col,
 11    case when substr(trim(col), -2) = '.0' then substr(trim(col), 1, length(trim(col)) - 2)
 12         else col
 13    end col_new
 14  from test;

COL    COL_NE
------ ------
12.0   12
12345  12345
150.02 150.02
2.0    2
3.20   3.20
ABAC.0 ABAC
DEF    DEF

7 rows selected.

SQL>

答案 1 :(得分:1)

您可以将TRIMTRAILING选项一起使用两次。 如果您愿意,也可以使用where a like '%.0'

UPDATE yourtable t
   SET a = TRIM (TRAILING '.' FROM TRIM (TRAILING '0' FROM a))
 WHERE SUBSTR (a, -2) = '.0';

它类似于RTRIM ( RTRIM(a, '0' ),'.')

答案 2 :(得分:0)

使用以下sql更正您的数据:

UPDATE ABC S
   SET S.A = SUBSTR (S.A, 1, LENGTH (S.A) - 2)
 WHERE INSTR (SUBSTR (S.A, -2, 2), '.0', -1) = 1;