我想保留主题所说的前导零。这是我的例子:
CREATE OR REPLACE VIEW TEST_VIEW AS
SELECT '00025' NUMBER1, 05 NUMBER2
FROM DUAL;
我希望NUMBER1和NUMBER2以VARCHAR格式存储为00025和05但是当我点击查询时它会将其存储为25和5。
我希望我能解释一下我的问题并等待回复。
答案 0 :(得分:0)
此查询:
CREATE OR REPLACE VIEW TEST_VIEW AS
SELECT '00025' as NUMBER1, '05' as NUMBER2
FROM DUAL;
应将NUMBER1
和NUMBER2
存储为字符串。字符串应该有前导零。也许您查询数据的方式存在问题。
答案 1 :(得分:0)
您的第二个号码附近缺少''
。第一个数字应该已经存储为varchar。
答案 2 :(得分:0)
视图只是一个存储的SQL语句,不会保留任何数据 当我运行你的SQL然后从测试视图中选择时,它按预期返回:引用的字符串作为字符串返回,并且数字作为数字返回(前导零被修剪)。
select * from test_view;
NUMBER1 NUMBER2
------- -------
00025 5
Oracle中数字字段中的前导零被视为格式化,除非要求格式化单行函数,否则不会提供格式,例如:
select number1, lpad(number2, 2, '0') number2 from test_view;
NUMBER1 NUMBER2
------- -------
00025 05
答案 3 :(得分:0)
"如果有可能的话,我只想以000BER格式存储00025"
不可能,Numbers以NUMBER格式存储,并且在没有前导零的情况下呈现。你想保留前导零,然后你需要将它们存储为字符串。这是因为数字'05' != '5' != '005'
只是字符串select lpad(to_char(25), 5 , '0') as number1
, lpad(to_char(5), 2 , '0') as number2
from dual
。
或者您可以将此作为显示问题处理。将它们存储为数字,但在查询时将它们转换为字符串:
{{1}}
答案 4 :(得分:-1)
确认Gordon,Jacob和Sudibta所说的话,无论如何你想要转换数字并加上前导零,你可以使用:
SELECT SUBSTR('0000' || CAST(25 AS VARCHAR(5)),-5) AS NUM_LD_Z FROM DUAL