sql select语句不起作用

时间:2012-12-24 11:43:44

标签: ios sql database sqlite

我问过这个问题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'"];

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

2 个答案:

答案 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而不使用任何%基本上归结为执行较慢版本的=