我问过这个问题here
当我运行此查询时
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];
它在我可以打印lat的值时不起作用,长在控制台中使用NSLog(@“lat =%f和long =%f”,pin_lat,pin_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'"];
我应该如何修改我的查询以便我可以运行它..
答案 0 :(得分: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 强>
答案 1 :(得分:0)
如果纬度和经度是数字,like
可能无法正常工作。
like
所做的是搜索符合该模式的字符串,执行like
而不使用任何%
基本上归结为执行较慢版本的=