2017-07-17 48 views
0

以下为表在哪里clausule在MySQL

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

对于给定的输入(myinput),例如20.1我想知道,如果它放在桌子上已经存在使用SUBSTRING而圆。

这意味着,我需要采取的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.) 

我在这里做的是:

  • 采取的纬度:20.123
  • 围着它,到上值:20.123
  • 修剪到第一位小数:20.1
  • 将其与输入相比较:20.1 = 20.1。好!

任何想法如何,我可以archieve我的目标是什么?也许不会使用SUBSTRING并使用正则表达式来获得后点数?我不在乎,如果我不得不使用任何其他功能。

在此先感谢。

+2

它不清楚,你为什么要使用'substring' –

+0

我不wan't使用'substring',我试图用子做归档文件。我不在乎,如果我不得不使用任何其他策略。 –

+0

“将其舍入到上限值”?这是什么意思? –

回答

2

只是比较具有精度小数点后一位反对四舍五入至小数点后一位纬度栏的输入:

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

如果输入小数精确度是不固定的,也许like能做到这一点:

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

这是SQLFiddle中的demo