Php Laravel原始查询以添加多列浮点值

Php Laravel原始查询以添加多列浮点值,php,laravel,phpmyadmin,Php,Laravel,Phpmyadmin,我将值存储到数据库中,如9:30和1(我的数据类型是数据库中的float,用于此列),当我检索时,我无法添加两个数字,它打印为10,但必须在10:30,我使用laravel添加这两个列 $get=DB::table('table_name')->select(DB::raw('sum(hours) AS hours')) ->get(); 有人能解决我的问题吗?浮点数表示带逗号的数字,。您想用节省时钟时间的

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

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

有人能解决我的问题吗?

浮点数表示带逗号的数字
。您想用
节省时钟时间的内容:

因此,在将时间存储到数据库之前,您可以将时间转换为浮动,
10:30->10.5
,然后将其汇总如下

$get=DB::table('table_name')->select(DB::raw('sum(hours) AS hours'))
                             ->first();
$hours = str_replace('.', ':', $get->hours);
这个解决方案不是beast,因为有更好的方法将日期保存为日期对象而不是浮点数对象来处理日期


另一种方法是使用
smalldatetime
而不是float来保存值。然后,您可以保存时间而不是数字,这样您就可以工作。

从数据库中检索数据后,您就可以这样做了

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

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

因此,我的建议是:

  • 以分钟为单位存储时间(或根据您的情况以最小单位存储)
  • 检索它,并将其除以60,那么您就得到了正确的值,而无需使用老套和不稳定的方法来解决它

我希望这是有用的。

要做的第一件事,是实际维护某种格式,如果存在
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
(您可以通过对其执行原始查询进行验证)。您可能会意外地在代码下面的某个地方对其进行了修剪或舍入。十进制分隔符可以是
,具体取决于语言环境(我认为欧洲更喜欢
,美国更喜欢
),关键是没有人使用
作为十进制分隔符。表('table')->选择(DB::raw('sum')(小时)作为小时“))您能否更改此查询以添加??:(更新了我的答案。如果你像
9.3
那样存储它们,这应该会起作用。请使用你的小时表打印,这样我们就可以看到你的输入类型。我的输入在一列中是9.30,另一列是1.00。它正在添加并在10.30中打印数字。需要时,它像10:30…在重试后,它不像9:30,它像9.30。你必须更改将值存储在db中的方式。为什么不使用日期数据类型呢?这种方式不是很好的做法,您在操作数据时会发现问题。即使您的“我的输入在一列中为9.30,另一列为1.00,它也在添加和打印10.30中的数字,就像10:30一样”然后简单地用冒号删除圆点就可以了。是的,我认为这是一个简单的方法,Thanx很高兴它很有用。请注意,在你将分钟除以60后,你将得到一个正常的浮点值,例如9.50,与9小时30分钟相同。我希望你理解我的意思,这样你就不会感到担心,你可以使用php datetime或Car您可以根据需要格式化输出。