Laravel RAW 查询添加多列浮点值

Posted

技术标签:

【中文标题】Laravel RAW 查询添加多列浮点值【英文标题】:Laravel RAW query to add multiple columns float value 【发布时间】:2018-02-26 16:32:06 【问题描述】:

我正在将值存储到数据库中,例如 9:30 和 1(我的数据类型是此列的数据库中的浮点数),当我检索时我无法添加两个数字,它打印的就像 10 但它必须是在 10:30 ,我正在使用 laravel 添加这两列

     $get=DB::table('table_name')->select(DB::raw('sum(hours) AS hours'))
                                 ->get();

谁能解决我的问题??

【问题讨论】:

首先要做的是实际维护某种格式,如果 9:30 存在,则 1 必须至少为 1:00 以便您维护 hh:mm 格式。然后使用DATEDIFF(T1, '00:00')SUM他们 是的,它就像 9:30 和 1:00 一样,我如何总结我的数据类型是 varchar 9:30 不是有效的浮点值(是吗?)您尝试将9:30 放入浮点列并最终在其中有一个9.0 是的,是的,我存储的是 9.30 和 1.00 如果是这种情况,那么数据库应该返回10.3 作为结果(您可以通过对其进行原始查询来验证)。您可能会不小心在代码下方的某个位置对其进行修剪或舍入。 【参考方案1】:

float 用于带有逗号 , 的数字。你想用:节省时钟时间。

因此,您可以在将时间存储到数据库之前将其转换为浮点数,10:30 -> 10.5,然后像这样总结起来

$get=DB::table('table_name')->select(DB::raw('sum(hours) AS hours'))
                             ->first();
$hours = str_replace('.', ':', $get->hours);

这个解决方案不是野兽,因为有更好的方法来处理日期,将它们保存为日期对象而不是浮点对象。

另一种方法是使用smalldatetime 而不是float 来保存值。然后你可以节省时间而不是数字。

【讨论】:

小数点分隔符可以是,.,具体取决于语言环境(我认为欧洲更喜欢,,美国更喜欢.)关键是没有人使用: 作为小数分隔符。 table('table')->select(DB::raw('sum(hours) AS hours')) 能否请您更改此查询以添加? :( 更新了我的答案。如果您将它们存储为9.3,这应该可以工作 请打印使用您的小时表,以便我们查看您的输入类型 我的输入是一列中的 9.30,另一列是 1.00,它正在添加和打印 10.30 中的数字,需要它像 10:30...【参考方案2】:

最好的办法是将数据类型从浮点数更改为整数。通常在大多数编程和数据库级别,浮点值是有问题的,也可能导致精度问题/问题。

所以我的建议是:

以分钟为单位存储时间(或基于您的情况的最小单位) 检索它,然后将其除以 60,然后您就获得了正确的值,而无需使用 hacky 和不稳定的方法来解决它。

我希望这是有用的。

【讨论】:

是的,我认为这是一个简单的方法,谢谢 很高兴它很有用。请注意,将分钟除以 60 后,您将获得一个正常的浮点值,例如9.50 相当于 9 小时 30 分钟。我希望你明白我的意思所以你不要担心,你可以使用 php datetime 或 Carbon 来格式化你想要的输出。【参考方案3】:

您可以在从 db 检索数据后这样做

$n1 = '9:30';
$timestamp = strtotime($n1);
echo date('H:i',strtotime('+1 hour',$timestamp));

【讨论】:

检索后不像 9:30 像 9.30 您必须更改将值存储在 db 中的方式。为什么不使用 Date 数据类型呢?你做事的方式不是好习惯,你会在操作数据时发现问题。 即使您的“我的输入在一列中是 9.30,而另一列是 1.00,它正在添加并在 10.30 中打印数字,就像 10:30 一样”然后只需删除带有冒号的点即可工作。

以上是关于Laravel RAW 查询添加多列浮点值的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 4 无法运行整个 RAW 查询

Laravel 查询生成器对多列求和

Laravel 验证使用 eloquent 或 raw 查询

laravel 的DB::raw() 语法使用

绑定参数到 Db::raw laravel 查询

Laravel 查询生成器按天计算行数 SQL db::raw