2011-04-28 124 views
0

东西SQL SELECT语句错误是错误的与时间字段声明:与日期时间

MYDB:

id name datetime 
1 test1 2011-04-28 19:37:44 
2 test2 2011-04-28 21:27:04 

当我运行下面的语句

SELECT * 
FROM myTable 
WHERE ('datetime' > '2011-04-28 21:00:00') 

我得到的所有 - TEST1和test2

当我运行这个声明

SELECT * 
FROM myTable 
WHERE ('datetime' = '2011-04-28 21:27:04') 

我什么也没得到

当我运行下面的语句

SELECT * 
FROM myTable 
WHERE ('datetime' > '2011-04-28 21:00:00') 
    AND ('datetime' < '2011-04-29 21:00:00') 

我什么也没得到

为什么?

+0

你确定你的日期时间字段是一个真正的日期时间字段,而不是varchar?你用什么数据库? – 2011-04-28 20:14:29

回答

1

您将字段名称“datetime”放入引号中,MySQL将其视为字符串而不是列。

SELECT * FROM myTable WHERE datetime > '2011-04-28 21:00:00'; 
+0

+1实际上,每个DBMS都将''datetime''视为字符串文字和'datetime'作为列名称。 – 2011-04-28 20:14:39

0

实际上是否将datetime列名称放在单引号中?如果是的话,这意味着你将字符串'datetime'与字符串'2011-04-28 21:00:00'比较,这没有多大意义。在SQL中,如果单引号中包含的内容通常是字符串文字。

你试过:

SELECT * FROM myTable WHERE datetime > '2011-04-28 21:00:00' 

或者更可能的:

SELECT * 
FROM myTable 
WHERE datetime > to_date('2011-04-28 21:00:00','YYYY-MM-DD HH24:MI:SS'); 

注意:to_date功能和格式字符串是特定于Oracle,你没有指定要使用哪个数据库和这些函数往往是数据库特定的。

1

您正在进行字符串比较,即将字符串“datetime”与某个日期进行比较。

查询更改为

...WHERE ([datetime] = '2011-04-28 21:27:04') 
0

绕柱名称中删除引号:

SELECT * FROM myTable WHERE (datetime > '2011-04-28 21:00:00') 

在查询中,你比较string“日期时间”对另一string,由数字构成。

字母数字前面有数字,所以“datetime”字符串大于您要比较的数字日期字符串。