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

时间:2017-10-02 08:56:47

标签: database oracle plsql number-formatting

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

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

我想保持0,因为实数是1580,我想显示1.580。我怎么能这样做?

谢谢。

2 个答案:

答案 0 :(得分:2)

使用NLS_NUMERIC_CHARACTERS的{​​{1}}和NLS_CURRENCY选项的几个选项:

SQL Fiddle

Oracle 11g R2架构设置

TO_NUMBER

查询1

CREATE TABLE tab1 (
  col1 VARCHAR2( 200 )
);

INSERT INTO tab1 VALUES ( '€ 1.580' );

<强> Results

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

如果您想将其重新格式化为字符串,请再次使用| VALUE1 | VALUE2 | |--------|--------| | 1580 | 1580 |

查询2

TO_CHAR

<强> Results

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

但是您应该将值存储为数字,并且只要您想将其格式化为货币,那么只需将| VALUE2 | |--------| | 1.580 | 与适当的NLS选项一起使用,并执行 NOT 将其存储为格式化的字符串。

答案 1 :(得分:0)

如果您有固定的数字,那么您需要像这样使用

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)