代码之家  ›  专栏  ›  技术社区  ›  Jordan

iPhone SQLite日期问题

  •  3
  • Jordan  · 技术社区  · 15 年前

    数据库创建得很好,插入工作也很好。下面的select语句有问题。它不会返回任何记录和错误。在任何其他字段上选择都可以。有人能认出我做错了什么吗?

    "create table if not exists data (pkey integer primary key, doc date)"
    
    [db executeUpdate:@"insert into data ( doc) values (?)" , [NSDate date]];
    
    "select * FROM data WHERE doc between '2009-08-23' and '2009-08-23' "
    
    3 回复  |  直到 15 年前
        1
  •  10
  •   Mark Rushakoff    15 年前

    部分 between '2009-08-23' and '2009-08-23' 总是错误的,因为这是一个零时间的范围,因为缺乏更好的描述。

    如果您希望项目恰好发生在2009-08-23上,请选择 between '2009-08-23' and '2009-08-24' 从23日午夜到24日午夜。

    下面是一个实际的例子:

    sqlite> CREATE TABLE t (d DATETIME);
    sqlite> SELECT DATETIME('now');
    2009-08-24 02:32:20
    sqlite> INSERT INTO t VALUES (datetime('now'));
    sqlite> SELECT * FROM t;
    2009-08-24 02:33:42
    sqlite> SELECT * FROM t where d BETWEEN '2009-08-24' and '2009-08-24';
    sqlite> SELECT * FROM t where d BETWEEN '2009-08-24' and '2009-08-25';
    2009-08-24 02:33:42
    
        2
  •  2
  •   paulthenerd    15 年前

    我必须在sqlite上执行这种精确的查找,这里有一个简单的日期格式示例,用于获取日期的开始和结束时间戳。

    在我的示例中,我将使用此时间戳格式的时间戳存储在sqlite中:“yyyy-mm-dd hh:mm:ss.ss ss”。此示例使用当前日期([nsdate date])。

    NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];  
    [dateFormatter setDateFormat:@"yyyy-MM-dd"];
    NSString *dateString = [dateFormatter stringFromDate:[NSDate date]];
    NSDate *startOfDay = [dateFormatter dateFromString:dateString];  
    // add a full day and subtract 1 second to get the end of day timestamp
    NSDate *endOfDay = [startOfDay addTimeInterval:(60*60*24)-1];
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss.SSSS"];
    

    然后可以使用startofday和endofday作为查询值。

        3
  •  1
  •   Marian    15 年前

    sqlite执行字符串比较,而不是日期比较。

    因此,解决问题的一种方法是:

    “从文档位于'2009-08-23'和'2009-08-23 99'之间的数据中选择*”