0

我在这里问过这个问题

当我运行这个查询 NSString *qsql = [NSString stringWithFormat:@"SELECT * FROM site"];

它工作正常,但是当我尝试这个查询 NSString *qsql = [NSString stringWithFormat:@"SELECT name FROM site WHERE latitude LIKE %f AND longitude LIKE %f",pin_lat,pin_long]; 时它不起作用,而我可以在控制台中使用 NSLog(@"lat = %f and long=%f",pin_lat,pin_long) 打印 lat, long 的值,它会打印正确的值那么为什么它没有在查询中取值呢?

我尝试修改查询,但它根本不起作用

修改后的查询就像 -NSString *qsql = [NSString stringWithFormat:@"SELECT name FROM site WHERE latitude LIKE \"%%%f%%\" AND longitude LIKE \"%%%f%%\" ",pin_lat,pin_long];

但是当我尝试手动输入纬度时它工作正常

NSString *qsql = [NSString stringWithFormat:@"SELECT * from site where latitude='-31.7306'"];

我应该如何修改我的查询以便我可以运行它..

4

2 回答 2

1

我想,这是因为您AND在查询中使用,所以它会选择row满足两个条件的。尝试使用OR而不是AND喜欢

NSString *qsql = [NSString stringWithFormat:@"SELECT name FROM site WHERE latitude LIKE '%f' OR longitude LIKE '%f'",pin_lat,pin_long];

或者,如果您想要满足这两个条件的行,那么您需要在数据库中拥有该值。

或者,它可能会发生,因为LIKE尝试完全匹配您提供的内容,您需要使用%符号匹配任何内容,然后继续使用该变量。如果你想像你提到的那样匹配你的纬度,你需要使用这样的查询

NSString *qsql = [NSString stringWithFormat:@"SELECT name FROM site WHERE latitude LIKE '%.2f%%' OR longitude LIKE '%.2f'",pin_lat,pin_long];

这将匹配该纬度或经度值中精度为 2 之后的任何值。它将匹配以下值。 19.241111111
19.242222222
19.243333333

于 2012-12-24T11:58:28.953 回答
0

如果纬度和经度是数字,则like可能无法按预期工作。

什么like是搜索适合该模式的字符串,执行like没有任何%'s 基本上归结为执行较慢版本的=.

于 2012-12-24T12:01:03.100 回答