首页 / 数据库 / MySQL / Mysql中使用DATE列的问题
Mysql中使用DATE列的问题2011-11-16DATE值的格式是"YYYY-MM-DD"。按照标准的SQL,不允许其他格式。在UPDATE表达式以及SELECT语句的WHERE子句中应使用该格式。例如:MySQL> SELECT * FROM tbl_name WHERE date >= "2003-05-05";
为了方便,如果日期是在数值环境下使用的,MySQL会自动将日期转换为数值(反之亦然)。它还具有相当的智能,在更新时或在与TIMESTAMP、DATE或DATETIME列比较日期的WHERE子句中,允许“宽松的”字符串形式(“宽松形式”表示,任何标点字符均能用作各部分之间的分隔符。例如,"2004-08-15"和"2004#08#15"是等同的)。MySQL还能转换不含任何分隔符的字符串(如"20040815"),前体是它必须是有意义的日期。使用<、<=、=、>=、>、或BETWEEN操作符将DATE、TIME、DATETIME或TIMESTAMP与常量字符串进行比较时,MySQL通常会将字符串转换为内部长整数,以便进行快速比较(以及略为“宽松”的字符串检查)。但是,该转换具有下述例外:比较两列时将DATE、TIME、DATETIME或TIMESTAMP列与表达式进行比较时使用其他比较方法时,如IN或STRCMP()。对于这些例外情形,会将对象转换为字符串并执行字符串比较,采用该方式进行比较。为了保持安全,假定按字符串比较字符串,如果你打算比较临时值和字符串,将使用恰当的字符串函数。对于特殊日期"0000-00-00",能够以"0000-00-00"形式保存和检索。在MyODBC中使用"0000-00-00"日期时,对于MyODBC 2.50.12或更高版本,该日期将被自动转换为NULL,这是因为ODBC不能处理这类日期。由于MySQL能够执行前面所介绍的转换,下述语句均能正常工作:mysql> INSERT INTO tbl_name (idate) VALUES (19970505);
mysql> INSERT INTO tbl_name (idate) VALUES ("19970505");
mysql> INSERT INTO tbl_name (idate) VALUES ("97-05-05");
mysql> INSERT INTO tbl_name (idate) VALUES ("1997.05.05");
mysql> INSERT INTO tbl_name (idate) VALUES ("1997 05 05");
mysql> INSERT INTO tbl_name (idate) VALUES ("0000-00-00");
mysql> SELECT idate FROM tbl_name WHERE idate >= "1997-05-05";
mysql> SELECT idate FROM tbl_name WHERE idate >= 19970505;
mysql> SELECT MOD(idate,100) FROM tbl_name WHERE idate >= 19970505;
mysql> SELECT idate FROM tbl_name WHERE idate >= "19970505";