2017-07-17 58 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