NZSQL / Code - 如何将NZSQL设置为不舍入到最接近的整数

时间:2014-12-16 16:33:55

标签: sql netezza

的所有人。

我正在使用NZSQL中的一些函数,并且我发现NZSQL正在四舍五入到最接近的整数,并且不确定这是否是函数的设计,或者是否可以禁用舍入。

我正在使用的其中一项功能是

TO_NUMBER(AGE(column_a)' 000&#39)

并且它舍入到最接近的数字,但我想让它保留十进制数。像12.42这样的东西。这可能吗?我应该使用不同的功能吗?我已经尝试过使用' 00.000)但它仍然会轮次......

提前致谢!

1 个答案:

答案 0 :(得分:1)

AGE功能会返回一个时间间隔,当您与TO_NUMBER的格式模板配对时,该间隔可能不会像您期望/希望的那样。模板的形状具有与您可能想要的不同的特定含义。

例如,这里我有一个格式模板,对应于NUMERIC(20,6)

SYSTEM.ADMIN(ADMIN)=> select age('01/01/1960'::date) , to_number(age('01/01/1960'::date),'99999999999999999999.999999');
                AGE                |      TO_NUMBER
-----------------------------------+---------------------
 54 years 11 mons 15 days 23:17:21 | 541115231721.000000
(1 row)

在这里,您可以看到TO_NUMBER结果中以数字表示的间隔。前两位代表54年,接下来的两位代表11个月,小数点前的最后两位代表21秒。请注意,小数点后面没有值,这是预期的(好吧,如果不是我们的设计)。

如果我们将模板中的一个9从小数点的右侧或左侧移开,我们会得到格式错误的响应。请注意,48秒被截断为4。

SYSTEM.ADMIN(ADMIN)=> select age('01/01/1960'::date) , to_number(age('01/01/1960'::date),'9999999999999999999.999999'), to_number(age('01/01/1960'::date),'99999999999999999999.99999');
                AGE                |     TO_NUMBER      |     TO_NUMBER
-----------------------------------+--------------------+--------------------
 54 years 11 mons 15 days 23:27:48 | 54111523274.000000 | 54111523274.000000
(1 row)

有一点需要强调的是,TO_NUMBER模板的格式除了您可能期望/想要的之外还有其他功能。

你可能想要的是(如果我从你的评论中得到正确的要点)是这样的,它使用DATE_PART作为DATEDIFF的宽松替代品:

SYSTEM.ADMIN(ADMIN)=> select date_part('day',now() - '01/01/1960'::date) / 365.242;
  ?COLUMN?
------------
 54.9580826
(1 row)