datetime字段的语句有问题:
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')
I got nothing
当我运行以下语句
SELECT *
FROM myTable
WHERE ('datetime' > '2011-04-28 21:00:00')
AND ('datetime' < '2011-04-29 21:00:00')
I got nothing
为什么?
您将字段名"datetime"放入引号中,MySQL将其视为字符串,而不是列。
SELECT * FROM myTable WHERE datetime > '2011-04-28 21:00:00';
您正在进行字符串比较,即将字符串 "datetime"与某个日期进行比较。
将查询更改为
...WHERE ([datetime] = '2011-04-28 21:27:04')
删除列名周围的引号:
SELECT * FROM myTable WHERE (datetime > '2011-04-28 21:00:00')
在您的查询中,您将string
"datetime"与另一个由数字组成的string
进行比较。
从字母数字的角度来看,数字排在字母之前,因此"datetime"字符串大于您正在比较的数字日期字符串。
您是否实际上将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的,你没有指定你正在使用哪个数据库,这些函数往往是特定于数据库的。