SQL Server中带有表达式的CAST语句

时间:2015-03-09 11:58:28

标签: sql-server

我正在尝试编写具有以下条件的SQL select:

  • 如果变量中提供的距离不为空,则选择小于上述距离的数据
  • 如果距离为null,则选择行。

我只想使用CASE语句

以下是我的查询

declare @distance int
set @distance  = 3000

select 
    ROUND((dbo.GetDistance(@UserLat, @UserLon, Latitude, Longitude) * 1000), 0) AS Distance 
from 
    messages     
order by 
    Distance desc 

1 个答案:

答案 0 :(得分:1)

您可以使用以下查询:

SELECT *
FROM (
   SELECT *, 
          ROUND((dbo.GetDistance(@UserLat, @UserLon, Latitude, Longitude)*1000),0) AS Distance 
   FROM messages ) s
WHERE (@distance IS NULL) OR (s.Distance < @distance)
ORDER BY Distance DESC

如果@distance为空,则会返回 messages的所有行,否则只会选择s.Distance < @distance行。