创建视图时在oracle中为char设置数字格式

时间:2013-07-18 15:03:16

标签: sql oracle

我有以下观点:

    CREATE OR REPLACE  VIEW viewA ("col1", "col2") AS 
  SELECT DISTINCT CAST("col1" AS CHAR(1)),
 CAST(to_char("col2",'00.0000') AS char(7))
  FROM tableA

col2的数据类似于22.33或2.3或0.2345或2,但是dec为4位,数字为2位。 它必须写入固定长度为7位的文件,包括十进制。因此我写了col2,'00 .0000',但数字格式'23.234'被写入col2,为23.234,没有任何尾随零。

2 个答案:

答案 0 :(得分:0)

您需要使用为您添加尾随零的RPAD函数

CREATE OR REPLACE  VIEW viewA ("col1", "col2") AS 
SELECT DISTINCT CAST("col1" AS CHAR(1)),
   RPAD(CAST(to_char("col2",'00.0000') AS char(7)),7,'0')
 FROM tableA

但如果你的号码没有小数值,你可能会遇到问题,例如假设值 12 你最终会得到 1200000 但是这可能会给你一个想法

答案 1 :(得分:0)

00.0000的格式代码应包含23.234的第四个小数位;它总是对我有用。我正在使用Oracle 11。

我尝试CAST(TO_CHAR(23.234, '00.0000') AS CHAR(7))时遇到的问题是错误ORA-25137: Data value out of range。发生这种情况是因为TO_CHAR返回长度为8的字符串:

SQL> SELECT '[' || TO_CHAR(23.234, '00.0000') || ']' FROM DUAL

'['||TO_CH
----------
[ 23.2340]

TO_CHAR在开头留出一个空格,以防数字为负数,在这种情况下,它会在那里放一个减号。您可以使用格式字符串中的FM修饰符来删除前导空格:

SQL> SELECT '[' || TO_CHAR(23.234, 'FM00.0000') || ']' FROM DUAL

'['||TO_CH
----------
[23.2340]

这是一个很长的说法“试试这个” - 唯一的变化是FM格式字符串中的TO_CHAR

CREATE OR REPLACE VIEW viewA ("col1", "col2") AS 
SELECT DISTINCT
  CAST("col1" AS CHAR(1)),
  CAST(to_char("col2",'FM00.0000') AS char(7))
FROM tableA

最后一点说明:用双引号括起列名会使它们区分大小写,这通常会导致麻烦。如果可以,我建议丢失双引号。