gpt4 book ai didi

mysql - 使用子字符串函数的结果计算多列的值

转载 作者:行者123 更新时间:2023-11-29 14:15:43 25 4
gpt4 key购买 nike

我正在尝试运行以查找具有长和纬度的最近点。效果很好的是我在数据库中存储了单独的值,但是我有一个管道字符串,我可以用子字符串索引来拆分它。然而,当我尝试在我的选择查询中组合这些函数时,我没有得到任何快乐。

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(longlat, '|', 1), '|', -1) as 'lat',
SUBSTRING_INDEX(SUBSTRING_INDEX(longlat, '|', 2), '|', -1) as 'lng',
title,
( 6371 * acos( cos( radians(51.527351) ) * cos( radians( 'lat') ) * cos( radians( 'lng' ) - radians(0.765544) ) + sin( radians(51.527351) ) * sin( radians( 'lat' ) ) ) ) AS distance
FROM locations HAVING distance < 500
ORDER BY distance
LIMIT 0 , 20

有人可以透露一些信息吗?

最佳答案

radians( 'lat')

在查询的这一部分中,'lat' 是一个字符串,而不是列名或类似名称。当将该字符串传递给弧度时,它将转换为数字,在本例中转换为零。因此,您要将 0 转换为弧度。

您不能使用一列作为另一列值计算的输入。您要么必须重复表达式,要么使用如下子查询:

SELECT lat, lng, title,
(6371 * acos(cos(radians(51.527351)) *
cos(radians(lat)) * cos(radians(lng) - radians(0.765544)) +
sin(radians(51.527351)) * sin(radians(lat)))
) AS distance
FROM
(SELECT title,
SUBSTRING_INDEX(SUBSTRING_INDEX(longlat, '|', 1), '|', -1) + 0 as lat,
SUBSTRING_INDEX(SUBSTRING_INDEX(longlat, '|', 2), '|', -1) + 0 as lng
FROM locations
) AS sub
HAVING distance < 500
ORDER BY distance
LIMIT 0 , 20

关于mysql - 使用子字符串函数的结果计算多列的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12727009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com