SQL SELECT语句的日期时间错误



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的,你没有指定你正在使用哪个数据库,这些函数往往是特定于数据库的。

相关内容

  • 没有找到相关文章

最新更新