我有一个数据库,它有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 ;
5条答案
按热度按时间vpfxa7rd1#
问题是你正在用单引号 Package 列名,迫使十进制值与字符串文字进行比较。列名和表名都是标识符,而不是字符串,所以不应该用单引号括起来。
yuvru6vn2#
正如@JW所建议的,您将反引号(```)和单引号(
'
)混合在一起。在数据库表名和列名周围使用反引号,但在数据值周围使用引号。此外,查询的后半部分与前半部分不匹配。你有
但它应该是
所以在第四个语句中缺少了列名。
或者,正如@JW所说,使用
BETWEEN
,这也更容易阅读!egmofgnx3#
示例:
查询STATION的北方半球纬度(LAT_N)之和,其值大于38.7880且小于137.2345。把你的答案截短到小数点后4位。
uurity8g4#
这个问题非常简单,您开发的查询需要使用以下属性之一:LAT_N。
LAT_N的最低和最高值在问题中给出。BETWEEN函数将帮助您获得LAT_N的最高值和最低值之间的值,ROUND函数将使我们的值舍入到所需的小数点(在本例中为4)。
我的查询将如下:
从LAT_N在38.7880和137.2345之间的桩号选择ROUND(SUM(LAT_N),4);
8ehkhllq5#
根据大于和小于进行过滤,并将答案舍入到小数点后X位。我将在MS SQL上使用CAST和UNION函数遵循这种方法
在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
替换为数据库中表的实际名称。