SELECT 12345 || 0011 from dual;
Oracle中的结果显示为1234511.它正在删除零。
SELECT length(12345 || 0011) from dual;
Oracle的结果是7.它不计算零。
我正在考虑做lpad,但问题是上面传递的0011作为一个数字。实际上,它可以在程序中以2,3或4位数字形式出现。
如何在连接或查找长度时不会删除零的查询?
由于
这是来自程序......
SELECT Count(programID)
INTO pCount
FROM program
WHERE SUBSTR(PrefixA || PrefixB, 1, (LENGTH(72776 || 0906))) = 72776 ||
0906
or PrefixA || PrefixB = SUBSTR(72776 || 0906, 1, LENGTH(PrefixA || PrefixB))
;
0906和72776来自程序调用。它可以是两位,三位或四位数字。例如:090,08,770,0906。
如果上面的数字不在程序表中,那么它应该在PCOUNT中产生一个“零”计数,但是上面的查询正在截断0,因此将数字形成为72776906,并且该组合确实存在于数据库中。
答案 0 :(得分:4)
0011
是一个数字文字;数字11
与011
,0011
等相同,并且不保留任何前导零,因为它们没有语义值(作为数字)。它不是一个字符串;字符串文字围绕单引号(即'0011'
)并保留所有字符。
如果你想保留前导零,那么使用字符串:
SELECT '12345' || '0011' FROM DUAL
或将数字转换为零填充字符串:
SELECT LPAD( 12345, 5, '0' ) || LPAD( 11, 4, '0' ) FROM DUAL;
(注意:如果输入长于填充大小,则LPAD
将显示最高位数,直到达到填充大小为止
或者
SELECT TO_CHAR( 12345, '00000' ) || TO_CHAR( 11, '0000' ) FROM DUAL;
(注意:如果输入的长度超过格式掩码的大小,那么TO_CHAR
将不会显示数字,而是会显示#
个字符
答案 1 :(得分:1)
如果你总是想要4位数,那么Oracle有to_char()
select trim(to_char(12345,'99999999999') -- use as many 9's as the max length of field1
|| to_char(0011,'0000') -- This will always pad this to 4 digits
from dual