如何比较两个数字(两次)和 return XQuery 中的字符串

How to compare between two numbers (twice) and return a string in XQuery

我有一个酒吧数据库,我需要比较两个数字(纬度)和另外两个(经度),以及 return 位于这些坐标之间的每个酒吧名称。

我尝试了使用逻辑和算术运算符的 where 子句,尝试了一个变量和两个变量。

无论坐标如何,所有酒吧的输出始终相同。

for $x in db:open("pub", "pub.xml")/serviceList/service
where $x/geoData/latitude='40.400000000000' and $x/geoData/latitude='40.410000000000'
return $x/basicData/name

想法是循环数据库查找坐标在 40.40 和 40.41(纬度)和 -3.7 i -3.71(经度)和 return 名称之间的所有酒吧。

您当前正在使用 and 条件测试纬度值是否等于两个不同的字符串(它永远不会匹配两个值,除非有多个纬度元素,但您没有展示示例XML)

您可能想将这些纬度和经度值作为数字进行比较(从您的值中删除引号)

for $x in db:open("pub", "pub.xml")/serviceList/service
where (
  $x/geoData/latitude >= 40.4 and $x/geoData/latitude <= 40.41
  and 
  $x/geoData/longitude >= -3.7 and $x/geoData/latitude <= 3.7
)
return $x/basicData/name

Mads Hansen 的解决方案可以缩写为:

for $x in db:open("pub", "pub.xml")/serviceList/service
where (
  $x/geoData/latitude[. ge 40.4 and . le 40.41]
  and 
  $x/geoData/longitude[. ge -3.7 and . le 3.7]
)
return $x/basicData/name

甚至更进一步

db:open("pub", "pub.xml")/serviceList/service
    [geoData[latitude[. ge 40.4 and . le 40.41] and longitude[. ge -3.7 and . le 3.7]]
    /basicData/name