2016-03-21 103 views
0

在我的表中,我存储的数据类似2015-11-24 14:53从特定日期选择记录

当我尝试从日期2015-11-24

SELECT * FROM TRANSACTIONS where id='22' 
and date >= date('2015-11-24 00:00') 
and date <= date('2015-11-24 23:59') 

我没有得到任何东西。(有与最新记录)

+3

您正在选择一个ID为22的记录,如果其日期介于2个给定值之间,则只会获得该记录。 – Allinone51

+0

所以我假设你的日期存储为['TEXT'](https://www.sqlite.org/datatype3.html)? – StephenH

回答

1

如果你被id,这应该是唯一的选择,没有必要通过date选择。您可以考虑选择非唯一字段(在这种情况下,date),如搜索。但是你说“选择这个特定的行(id为22的行),然后检查它是否符合这些日期参数”。所以使用这个语句你只会得到0或1的结果。

你应该改变你的声明是这样的

SELECT * FROM TRANSACTIONS where 
date >= date('2015-11-24 00:00') 
and date <= date('2015-11-24 23:59') 

然而,正如Allinone51指出,如果你的领域是TEXT型的,安全的赌注是调用您的文本字段date()功能

SELECT * FROM TRANSACTIONS where 
date(date) >= date('2015-11-24 00:00') 
and date(date) <= date('2015-11-24 23:59') 

这就是说,非日期比较应该工作。为了测试这个,在命令窗口中打开sqlite3并运行select date('2015-11-24 23:59');。结果将是2015-11-24

如果我们用前一天的日期进行测试,下面是使用布尔运算符的各种组合和使用date()函数的结果。

sqlite> SELECT (date('2015-11-24 23:59') == '2015-11-24'); 
1 
sqlite> SELECT (date('2015-11-24 23:59') >= '2015-11-23'); 
1 
sqlite> SELECT (date('2015-11-24 23:59') <= '2015-11-23'); 
0 
sqlite> SELECT (date('2015-11-24 23:59') < '2015-11-23'); 
0 
sqlite> SELECT (date('2015-11-24 23:59') > '2015-11-23'); 
1 
sqlite> SELECT (date('2015-11-24 23:59') == date('2015-11-24')); 
1 
sqlite> SELECT (date('2015-11-24 23:59') >= date('2015-11-23')); 
1 
sqlite> SELECT (date('2015-11-24 23:59') <= date('2015-11-23')); 
0 
sqlite> SELECT (date('2015-11-24 23:59') < date('2015-11-23')); 
0 
sqlite> SELECT (date('2015-11-24 23:59') > date('2015-11-23')); 
1 

所以,如果我把样品date值在你的声明,我结束了这个结果

SELECT date('2015-11-24') >= date('2015-11-24 00:00') 
and date('2015-11-24') <= date('2015-11-24 23:59'); 
1 

最后一点:作为Allinone51在评论中指出,date('2015-11-24 00:00')date('2015-11-24 23:59')返回相同值,2015-11-24

sqlite> SELECT date('2015-11-24 00:00'); 
2015-11-24 
sqlite> SELECT date('2015-11-24 23:59'); 
2015-11-24 

基于此,也许你想datetime()函数?

+1

我可能是错的,但是,date('2015-11-24 00:00')是不是返回与('2015-11-24 23:59')相同的值? – Allinone51

+0

@ Allinone51是的,但这是OP在他原来的问题中使用的,所以我决定使用它。如果没有他们的数据,我会尽量让示例尽可能接近他们提供的内容。 – StephenH

+0

好吧,我只是想知道。 – Allinone51

2

您可以选择所有与记录中选择记录某日是这样的:

SELECT * FROM yourTable WHERE date('yourDateColumn') = 'your date'; 

你的情况:

SELECT * FROM TRANSACTIONS WHERE date(date) = '2015-11-24'; 

date()选择DATETIME的'date'部分。例如:

date('2014-01-01 00:00:00') would return '2014-01-01'