无法在 sql 中创建用户定义的函数来计算距离
Posted
技术标签:
【中文标题】无法在 sql 中创建用户定义的函数来计算距离【英文标题】:can't create a user defined function in sql to compute distance 【发布时间】:2017-03-14 08:05:47 【问题描述】:大家好,我正在尝试为餐厅创建高级搜索,其中包含许多过滤器供用户选择。其中之一是他/她的家和餐馆之间的距离。所以我想在sql中使用一个函数,它获取两个纬度和两个经度,并检查距离是否小于过滤器。
我在这里找到了一些解决方案,例如 Calculating distance between two points (Latitude, Longitude) 但无论如何我都无法创建该功能。我总是收到相同的错误“#1064 - 您的 SQL 语法有错误;请查看与您的 mysql 服务器版本相对应的手册,以了解要使用的正确语法”。我什至尝试创建一个更简单的函数,例如How to create a function in SQL Server,但我仍然遇到同样的错误。我只需复制该函数并将其粘贴到我的服务器中即可在数据库上运行 sql 查询。 有什么我想念的吗? (也许不再支持创建功能?)。 提前感谢您的任何建议/答案。
【问题讨论】:
您显示的链接是关于 MS SQL Server 的。但是根据您显示的错误消息 - 您正在使用 MySQL。为什么你认为语法是相同的? 这些是我尝试过的一些例子。我只是想创建一个函数来弄清楚它是如何工作的 您正在使用 MySQL。这种 DBMS 语法通常不同于 MS SQL 语法。因此,如果您想在 MySQL 中创建函数 - 最好查看 relevant 示例,例如 dev.mysql.com/doc/refman/5.7/en/create-procedure.html 【参考方案1】:根据您的标记为sql-server
,您应该能够创建如下所示的函数来返回 SQL Server 中的距离。
CREATE FUNCTION fnGetDistance(@source geography, @target geography)
RETURNS FLOAT
AS
BEGIN
RETURN @source.STDistance(@target)
END
然后你可以调用函数来获取两点之间的距离。
SELECT [dbo].[fnGetDistance] ('POINT(0 51.5)', 'POINT(-3 56)')
【讨论】:
所提供的错误文本清楚地表明 OP 使用 MySQL 并且他使用的sql-server
标签具有误导性。
是的@AndyKorneyev 你是对的,这可能是误导。我只是没有看到本地说 Mysql,因为在我的在线服务器上它只显示了一个名称“MariaDB 服务器版本”以上是关于无法在 sql 中创建用户定义的函数来计算距离的主要内容,如果未能解决你的问题,请参考以下文章