“大于”和“小于”MySql查询因小数字段而失败

wd2eg0qa  于 2023-05-28  发布在  Mysql
关注(0)|答案(5)|浏览(228)

我有一个数据库,它有3列:

user_id | lat      | lon
1       |-1.403976 | 53.428692
2       |-1.353276 | 55.224692
etc etc

纬度和经度都设置为十进制字段。我正在运行一个类似的查询,但它不是基于大于和小于给定的纬度/经度数字进行过滤:

SELECT * FROM `table` WHERE `lat` < '-1.399999' AND 'lat' > '-1.300000' 
AND 'lon' < '55.555555' AND > '53.000000'

这个查询只返回表中的每一行,我不知道为什么?是不是和字段设置成小数有关?
我希望有人能帮助-我知道这可能是一个简单的答案,如果你知道它。
按照注解-这里是创建表:

CREATE TABLE IF NOT EXISTS `members` (
`user_id` int(10) NOT NULL AUTO_INCREMENT,
`lat` decimal(8,6) NOT NULL,
`lon` decimal(8,6) NOT NULL,
UNIQUE KEY `user_id` (`user_id`),
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=136 ;
vpfxa7rd

vpfxa7rd1#

问题是你正在用单引号 Package 列名,迫使十进制值与字符串文字进行比较。列名和表名都是标识符,而不是字符串,所以不应该用单引号括起来。

AND `lat` > '-1.300000' 
AND `lon` BETWEEN '55.555555' AND '53.000000' -- use between here
yuvru6vn

yuvru6vn2#

正如@JW所建议的,您将反引号(```)和单引号(')混合在一起。在数据库表名和列名周围使用反引号,但在数据值周围使用引号。
此外,查询的后半部分与前半部分不匹配。你有

`lat` < '-1.399999' AND 'lat' > '-1.300000'
'lon' < '55.555555' AND > '53.000000'

但它应该是

`lat` < '-1.399999' AND `lat` > '-1.300000'
`lon` < '55.555555' AND `lon` > '53.000000'

所以在第四个语句中缺少了列名。
或者,正如@JW所说,使用BETWEEN,这也更容易阅读!

SELECT * FROM `table` WHERE `lat` BETWEEN '-1.399999' AND '-1.300000' AND `lon` BETWEEN '55.555555' AND '53.000000';
egmofgnx

egmofgnx3#

示例:
查询STATION的北方半球纬度(LAT_N)之和,其值大于38.7880且小于137.2345。把你的答案截短到小数点后4位。

SELECT TRUNCATE(SUM(LAT_N),4)
FROM STATION
WHERE LAT_N > 38.7880 and LAT_N < 137.2345;
uurity8g

uurity8g4#

这个问题非常简单,您开发的查询需要使用以下属性之一:LAT_N。
LAT_N的最低和最高值在问题中给出。BETWEEN函数将帮助您获得LAT_N的最高值和最低值之间的值,ROUND函数将使我们的值舍入到所需的小数点(在本例中为4)。
我的查询将如下:
从LAT_N在38.7880和137.2345之间的桩号选择ROUND(SUM(LAT_N),4);

8ehkhllq

8ehkhllq5#

根据大于和小于进行过滤,并将答案舍入到小数点后X位。我将在MS SQL上使用CAST和UNION函数遵循这种方法

SELECT CAST(lat AS DECIMAL(10,X)) AS lat_decimal, CAST(lon AS DECIMAL(10,X)) AS lon_decimal
FROM table
WHERE lat BETWEEN -1.399999 AND -1.300000
  AND lon BETWEEN 53.000000 AND 55.555555;

在MS SQL中-您可以使用CAST函数来删除四舍五入后的尾随0-例如452.05 vs 452.050000。使用CAST AS DECIMAL(10,X),因为X将确保小数点后只有X位。X值应替换为要舍入到的所需小数位数。例如,如果要四舍五入到小数点后6位,可以将X替换为6。DECIMAL(10,X)指定生成的十进制值总共有10位,小数位数为X。UNION运算符用于将两个单独查询的结果合并为一个结果集。在本例中,第一个查询检索与指定条件匹配的lat值,第二个查询检索与指定条件匹配的lon值。通过使用UNION,您可以在一个结果中获得两组值。确保将table替换为数据库中表的实际名称。

相关问题