当某些用户具有空 Lat Lng 字段时,如何按距离进行 SQL 排序



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

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.

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

有没有简单的方法来解决这个问题?

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

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

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

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

最新更新