0

我有一个成员表,当显示结果时,我想首先显示最近的用户,但是有些用户还没有设置位置,这会引发错误。

SELECT ROUND(geography::Point(Lat, Long, 4326).STDistance(geography::Point("&SearchLat&", "&SearchLong&", 4326))/1000,0) as Distance FROM users

如果遇到空字段,我会收到以下错误。

''geography::Point'' failed because parameter 1 is not allowed to be null.

我希望所有用户都显示,但最接近的用户首先显示,然后是没有距离的用户。

有没有一种简单的方法可以解决这个问题?

4

2 回答 2

3

您可以将所有位置未知的用户放在北极:

SELECT ROUND(geography::Point(COALESCE(Lat,89.9), COALESCE(Long,0), 4326).STDistance(
             geography::Point("&SearchLat&", "&SearchLong&", 4326))/1000,0) as Distance 
FROM users

或者在非洲海岸附近:

SELECT ROUND(geography::Point(COALESCE(Lat,0), COALESCE(Long,0), 4326).STDistance(
             geography::Point("&SearchLat&", "&SearchLong&", 4326))/1000,0) as Distance
FROM users

或者选择其他一些默认的纬度和经度,这样它们几乎肯定会远离其他用户。

于 2013-09-24T13:00:28.417 回答
1
SELECT ROUND(geography::Point(Lat, Long, 4326).STDistance(geography::Point("&SearchLat&",
"&SearchLong&", 4326))/1000,0) as Distance FROM users

WHERE Lat IS NOT NULL AND Long IS NOT NULL
于 2013-09-24T11:37:12.340 回答