0

我有以下观点:

    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,没有任何尾随零。

4

2 回答 2

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

最后一点:用双引号将列名括起来会使它们区分大小写,这通常会导致麻烦。如果可以的话,我建议你去掉双引号。

于 2013-07-18T15:36:18.250 回答
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,但也许这会给您一个想法

于 2013-07-18T15:09:56.330 回答