的所有人。
我正在使用NZSQL中的一些函数,并且我发现NZSQL正在四舍五入到最接近的整数,并且不确定这是否是函数的设计,或者是否可以禁用舍入。
我正在使用的其中一项功能是
TO_NUMBER(AGE(column_a)' 000&#39)
并且它舍入到最接近的数字,但我想让它保留十进制数。像12.42这样的东西。这可能吗?我应该使用不同的功能吗?我已经尝试过使用' 00.000)但它仍然会轮次......
提前致谢!
答案 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)