【问题标题】:PHP & Laravel: ConvertingVARCHAR value to FLOAT in queryPHP & Laravel:在查询中将 VARCHAR 值转换为 FLOAT
【发布时间】:2015-08-29 14:59:06
【问题描述】:

我的表中存储了两个字段 latlong,这些列的数据类型为 VARCHAR

现在在 Laravel 我有以下变量:

$ne_lat = 21.405122657695813;
$ne_lng = -102.32061363281252;
$sw_lat = 19.984311565790197;
$sw_lng = -104.19652916015627;

我想在查询中使用它与我的表数据进行比较,如下所示:

$agencies = DB::table('users')
        ->whereRaw('lat < ? AND lat > ? AND long < ? AND long > ?',[$ne_lat,$sw_lat,$ne_lng,$sw_lng])

我试过这样投射:

$agencies = DB::table('users')
        ->whereRaw('CAST(lat AS FLOAT) < ? AND CAST(lat AS FLOAT) > ? AND CAST(long AS FLOAT) < ? AND CAST(long AS FLOAT) > ?',[$ne_lat,$sw_lat,$ne_lng,$sw_lng])

但它没有显示任何结果(我没有收到任何错误消息,因为查询显示在 json 中)它只是没有显示。我的查询有什么问题?

提前致谢

【问题讨论】:

  • 你为什么首先将这些列定义为 varchar?
  • @mark baker - 这实际上是一个好问题......最初我将纬度和经度保存为 20.3534535643,-113.23534535(注意逗号)但现在出于测试目的,我将列拆分为两个不同的列..现在刚刚测试了将它们直接转换为浮动,我原来的问题仍然没有解决:(无论如何谢谢你的时间,让我思考
  • 您是否尝试过回显实际查询并直接在数据库上运行它?通过在查询后执行此操作:$query = DB::getQueryLog(); echo end($query);
  • @b.enoit.be 很棒的建议,马上试试
  • @b.enoit.be 显然输出不是我期望的样子:string(113) "select * from users where active = ? and lat ? AND lng ?"

标签: php mysql json laravel


【解决方案1】:
(int)(your value);

或者你可以使用:

intval(string)

这里有一些示例:

<?php
echo intval(42);                      // 42
echo intval(4.2);                     // 4
echo intval('42');                    // 42
echo intval('+42');                   // 42
echo intval('-42');                   // -42
echo intval(042);                     // 34
echo intval('042');                   // 42
echo intval(1e10);                    // 1410065408
echo intval('1e10');                  // 1
echo intval(0x1A);                    // 26
echo intval(42000000);                // 42000000
echo intval(420000000000000000000);   // 0
echo intval('420000000000000000000'); // 2147483647
echo intval(42, 8);                   // 42
echo intval('42', 8);                 // 34
echo intval(array());                 // 0
echo intval(array('foo', 'bar'));     // 1
?>

【讨论】:

  • 这对他的问题没有用。他试图让数据库将字符值转换为数字,以便他可以在 SQL 语句中进行比较。他不需要PHP来转换值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-25
  • 2015-06-03
  • 1970-01-01
  • 1970-01-01
  • 2018-01-26
  • 1970-01-01
相关资源
最近更新 更多