无法在 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 中创建用户定义的函数来计算距离的主要内容,如果未能解决你的问题,请参考以下文章

DB2 LUW:在Dynamic SQL中创建用户定义的函数

在 pytorch 中创建自定义梯度下降

VBA:在用户定义的函数中创建单元格注释

如何在 DB2 Z/OS 8.1 版本中创建用户定义函数?

在sql中创建一个组

SQL Data Warehouse Cube,如何让用户在 Excel 中创建自己的计算?