我有以下观点:
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,没有任何尾随零。
答案 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
最后一点说明:用双引号括起列名会使它们区分大小写,这通常会导致麻烦。如果可以,我建议丢失双引号。