SQL - 使用object属性作为函数的参数

时间:2014-07-21 14:43:52

标签: mysql sql geospatial

我正在努力制定正确的sql-query来访问存储在我的一个列中的对象的属性,并将其用作函数的输入:

  • 我有一张桌子'搜索'
  • in' search'一列名为' coord'并存储POINT-Objects
  • 我定义了一个功能' test'获取双输入参数,只返回输入参数double

我想进行查询,例如

SELECT test('coord.X') as res FROM `search` ORDER BY res

预期结果:名为' res'的列中列出的coord.X值从最低到最高排序。

我得到的是' 0'对于每个条目(coord X / Y值当然设置为任意值)。

如果我离开coord.X而没有"'"在它周围,查询失败并显示错误

#1054 - Unknown column 'coord.X' in 'field list'

我搜索了很多,但我找不到任何页面告诉我如何访问sql-objects的属性。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

查询不应该是:

SELECT coord as res FROM search ORDER BY res

也许我没有正确理解你的问题。

答案 1 :(得分:0)

考虑没有测试功能的示例查询。

SELECT coord.X as res FROM `search` ORDER BY res

Sql将coord.X视为列名,并在search中查找该列。由于X是coord的属性,而不是列名的一部分,因此这就是导致错误的原因。

使用

SELECT test(X(coord)) as res FROM `search` ORDER BY res

应该产生正确的结果。正如调用测试函数的语法是test()一样,调用X函数(在空间扩展中定义)的语法是X()。但是,此函数不适用于未显式声明为Point类型的列,因为sql不知道如何解析该值并返回指定的信息。

基本上,X()类似于许多其他mysql函数,例如ISNULL()SUM()。就像SUM()期望int数据类型作为输入一样,X()期望Point数据类型。