我正在编写一个条件,检查两列数据类型编号。
例如varchar2(100)大于varchar2(50),因为它包含更多字符。现在对于数字,数字(9,1)大于数字(10,3),因为它包含更多的数字?
在下面的示例中,F_ID
是number(10,3)
,我想与另一列number(9,3)
进行比较
DECLARE COL_COUNT NUMBER;
OLD_PREC NUMBER(5);
OLD_SCALE NUMBER(5);
BEGIN
SELECT DATA_PRECISION, DATA_SCALE INTO OLD_PREC,OLD_SCALE FROM USER_TAB_COLS
WHERE TABLE_NAME='EX_EMPLOYEE' AND COLUMN_NAME='F_ID';
IF ( OLD_PREC <= 9 AND OLD_SCALE < 3 ) THEN
-- do something
我可以像这样比较吗?因为(9,1) = 12345678,1
和(10,3) = 123456,1234
,所以基本上9,1大于10,3对吗?
答案 0 :(得分:0)
Oracle以科学记数法存储数字:http://docs.oracle.com/cd/B28359_01/server.111/b28318/datatype.htm#CNCPT1833因此,小数精度与存储数字所需的空间之间没有直接关系。
如果你想检查哪一个会占用更多空间作为文字,为什么不比较length(to_char(n1)) > length(to_char(n2))
?
答案 1 :(得分:0)
column_name NUMBER (precision, scale)
在上面的声明中,精度是总位数,而刻度是小数点右边的位数。
通过从精度中减去比例,您将找到小数点左边的数字。
因此,
NUMBER (9,1) could contain maximum 8 length number left of the decimal point : 9999,9999.9
和
NUMBER (10,3) could contain maximum 7 length number left of the decimal point : 999,9999.999
考虑到这一点,你可以说第一列更大。
请注意,如果小数点右边的数字为equal
,则必须检查scale
NUMBER (8,1) could contain maximum 7 length number left of the decimal point: 999,9999.9
和
NUMBER (10,3) could contain maximum 7 length number left of the decimal point : 999,9999.999
但在这种情况下,第二列较大,因为它有3个长度scale
答案 2 :(得分:0)
你说:
“varchar2(100)大于varchar2(50)对吗?它更多 性格。好吧现在对于数字,数字(9,1)比那更大 数字(10,3)“
作为一个infrence我只能得到你想要比较数据类型。请参阅下文,了解如何做到这一点。我使用PLSQL匿名块来解释。
declare
a number (9, 1);
b number (10, 3);
begin
if length (a) > length (b)
then
dbms_output.put_line ('a is bigger');
else
dbms_output.put_line ('a is smaller');
end if;
end;
输出:
SQL> /
a is smaller
PL/SQL procedure successfully completed.