在MySQL中的WHERE clausule上使用SUBSTRING和ROUND

时间:2017-07-17 09:14:36

标签: mysql

有下表

name | latitude | longitude
---------------------------
  A  |  20.123  |  114.8965
  B  |  1.987   |  -0.39123

对于给定的输入(myinput),例如20.1我想知道它是否已存在于表中。

这意味着我需要采取latitude(或longitude,但我们只关注latitude,以便简化问题)表的每一行,得到第一个小数,并将其四舍五入为上限值,并与input进行比较。

这样的东西,当然不起作用:

SELECT *
FROM mytable
WHERE substring(ROUND(latitude, 1), 1, 3) = myinput
                                   /\  /\
              the problem with this values are that the length is variable (20.123, 114, 8965, -0.39, etc.)

我在这里做的是:

  • 取A:20.123
  • 的纬度
  • 围绕它:到上限值:20.123
  • 将其修剪为第一个小数:20.1
  • 将其与输入20.1 = 20.1进行比较。 OK!

任何想法我怎样才能达到我的目标?也许不使用SUBSTRING并使用正则表达式来获取 the-number-after-the-dot ?我不在乎是否必须使用任何其他功能。

提前致谢。

2 个答案:

答案 0 :(得分:2)

只需将具有一位小数精度的输入与四舍五入位置的纬度列进行比较:

SELECT *
FROM mytable
WHERE ROUND(latitude, 1) = myinput

答案 1 :(得分:0)

如果未修复输入小数精度,则like可以执行此操作:

select *
from youtable
where latitude like concat(myinput, '%')

这是SQLFiddle中的demo