与日期时间
问题描述:
东西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')
我什么也没得到
为什么?
答
您将字段名称“datetime”放入引号中,MySQL将其视为字符串而不是列。
SELECT * FROM myTable WHERE datetime > '2011-04-28 21:00:00';
+0
+1实际上,每个DBMS都将''datetime''视为字符串文字和'datetime'作为列名称。 – 2011-04-28 20:14:39
答
实际上是否将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,你没有指定要使用哪个数据库和这些函数往往是数据库特定的。
答
您正在进行字符串比较,即将字符串“datetime”与某个日期进行比较。
查询更改为
...WHERE ([datetime] = '2011-04-28 21:27:04')
答
绕柱名称中删除引号:
SELECT * FROM myTable WHERE (datetime > '2011-04-28 21:00:00')
在查询中,你比较string
“日期时间”对另一string
,由数字构成。
字母数字前面有数字,所以“datetime”字符串大于您要比较的数字日期字符串。
你确定你的日期时间字段是一个真正的日期时间字段,而不是varchar?你用什么数据库? – 2011-04-28 20:14:29