通过保持相同的数字转换为数字(字符串)

convert to number (string) by keeping the same number

我有一个类似 € 1.580 (1580 €) 的字符串。 通过执行以下语句,数字变为:

select to_number(SUBSTR(col1,2)) from TAB1 where riga = 2;
Number Result: 1.58

我想保留0,因为实数是1580,我想显示1.580。我该怎么做?

谢谢。

如果你有固定位数那么你需要这样使用

select Convert(numeric(18,3),to_number(SUBSTR(col1,2))) from TAB1 where riga = 2;

Number Result: 1.580

或者

you can put in your to_number function of returns with numeric(18,3)

几个选项使用 NLS_NUMERIC_CHARACTERSNLS_CURRENCY 选项与 TO_NUMBER:

SQL Fiddle

Oracle 11g R2 架构设置:

CREATE TABLE tab1 (
  col1 VARCHAR2( 200 )
);

INSERT INTO tab1 VALUES ( '€ 1.580' );

查询 1:

SELECT TO_NUMBER(
        SUBSTR( col1, 2 ),
         '999G999',
         'NLS_NUMERIC_CHARACTERS='',.'''
       ) AS value1,
       TO_NUMBER(
         REPLACE( col1, ' ' ),
         'L999G999',
         'NLS_CURRENCY=''€'' NLS_NUMERIC_CHARACTERS='',.'''
       ) AS value2
FROM   tab1

Results:

| VALUE1 | VALUE2 |
|--------|--------|
|   1580 |   1580 |

如果你想将其重新格式化为字符串,只需再次使用 TO_CHAR:

查询 2:

SELECT TO_CHAR(
         TO_NUMBER(
           REPLACE( col1, ' ' ),
           'L999G999',
           'NLS_CURRENCY=''€'' NLS_NUMERIC_CHARACTERS='',.'''
         ),
         'FM999G999',
         'NLS_NUMERIC_CHARACTERS='',.'''
       )AS value2
FROM   tab1

Results:

| VALUE2 |
|--------|
|  1.580 |

但是您应该将该值存储为数字,每当您想将其格式化为货币时,只需使用 TO_CHAR( value, 'L999G999' ) 和适当的 NLS 选项并执行 NOT 将其存储为格式化字符串。