Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQLite中获取数字的ceil值_Sql_Sqlite_Ceil - Fatal编程技术网

在SQLite中获取数字的ceil值

在SQLite中获取数字的ceil值,sql,sqlite,ceil,Sql,Sqlite,Ceil,因此,我看到了一个很好的答案,但我希望无论如何都向上取整,而不是无论如何向下取整。例如,在强制转换int之前向其添加1是行不通的,因为它会将5.0“四舍五入”为6.0 那么我应该如何在SQLite中实现ceil select (case when x = cast(x as int) then cast(x as int) else 1 + cast(x as int) end) 使用php,您可以轻松: $db->createFunction(

因此,我看到了一个很好的答案,但我希望无论如何都向上取整,而不是无论如何向下取整。例如,在强制转换int之前向其添加1是行不通的,因为它会将5.0“四舍五入”为6.0

那么我应该如何在SQLite中实现
ceil

select (case when x = cast(x as int) then cast(x as int)
             else 1 + cast(x as int)
        end)

使用php,您可以轻松:

$db->createFunction('ceil', 'ceil', 1);

$db->createFunction('floor', 'floor', 1);

select ceil(\`column`) from table;

这将为您提供更优雅的相同答案:

SELECT CAST(x+1-1e-n AS INT);

(假设精度不超过小数点)

一些有用的答案,我发现这个解决方案也非常简单

select round(column+0.5) from table;

这意味着如果你的原始数字小于0.5,你总是向上取整;如果你的原始数字大于0.5,你总是向下取整。我知道这是很久以前的事了,但戈登,我认为多明戈的答案可能是这里最简洁的。这一个(虽然比多明戈的答案更详细)实际上是正确的。这是正确的方法,因为它涵盖了所有角落的情况。是一个更具可读性的版本。由于它将作为楼层功能使用,因此不会对其进行汇总。如果x的小数部分小于0.5,那么x+0.5将不会超过下一个整数。但是,这将起作用:
cast(四舍五入(x+0.5)为int)
最好的方法是选择cast(x+0.9为int);不,这是不正确的。用x=1试一下。。。它会给你2@Kyle今天什么都不用谢。对于精度小于n的所有情况,这一点都应适用:
SELECT CAST(x+1-1e-n为INT)
@Luís Chaves如果你在他的解决方案上尝试x=1.01,你会得到1,而解决方案应该是2。同意,这不适用于纯SQLite虽然语言是php,但我觉得@user2812583实际上提出了一个有效的解决方案。您总是可以像这样在SQLite中创建自定义函数,但谢天谢地,在这种上下文中有更好的方法。我建议了一些替代方案,但仍然得到了+1的奖励。它不会一直奏效。例如,
CEIL(1)=1
where
ROUND(1+0.5,0)=2
查看postIf x是0,这将得到1