10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 本手册下载 本手册摘录

使用日期列B.3.4.2问题

的格式日期值是YYYY-MM-DD。根据标准的SQL,不允许其他格式。您应该使用这种格式更新的表情和在哪里条款选择语句。例如:

SELECT * FROM t1日期> = ' 2003-05-05 ';

方便,MySQL自动将日期转换为一个数字,如果日期数字环境中使用,反之亦然。MySQL也许可放松当更新和在一个字符串格式在哪里条款,比较日期日期,DATETIME,或时间戳列。放松格式意味着任何标点字符可能被用作分隔符之间的部分。例如,“2004-08-15”2004 # 08 # 15是等价的。MySQL也可以包含任何分隔符(如转换成一个字符串“20040815”),只要它是有意义的约会。

当你比较日期,时间,DATETIME,或时间戳一个常量字符串<,< =,=,> =,>,或之间的运营商、MySQL通常把字符串转换为内部长整数比较快(和更多放松字符串检查)。然而,这种转换是受以下异常:

对于那些例外,比较是通过将对象转换为字符串,并执行一个字符串比较。

为了安全起见,假设比较字符串作为字符串并使用适当的字符串函数如果你想比较时间价值一个字符串。

特殊的日期“0000-00-00”可以存储和检索“0000-00-00”。当一个“0000-00-00”通过连接器/ ODBC使用日期,它是自动转换因为ODBC无法处理这样的日期。

因为MySQL执行刚刚描述的转换,以下语句工作(假设格式化是一个日期列):

插入t1(格式化)值(19970505);插入t1(格式化)值(19970505);插入t1(格式化)值(97-05-05);插入t1(格式化)值(“1997.05.05”);插入t1(格式化)值(1997年05年05);插入t1(格式化)值(0000-00-00);从t1选择格式化,格式化> = ' 1997-05-05 ';从t1选择格式化,格式化> = 19970505;选择国防部(格式化,100)从t1 idate > = 19970505;从t1选择格式化,格式化> = ' 19970505 ';

然而,下面的语句不工作:

选择从t1 idate STRCMP(格式化,' 20030505 ')= 0;

STRCMP ()是一个字符串函数,所以它转换格式化在一个字符串YYYY-MM-DD格式和执行一个字符串比较。它不转换“20030505”的日期“2003-05-05”和执行日期的比较。

如果你使ALLOW_INVALID_DATESSQL模式,MySQL允许您存储日期,只给出了有限的检查:MySQL只需要一天的范围从1到31日和月的范围从1到12。这使得MySQL为Web应用程序非常方便,你获得一年,在三个不同领域的月和日,你想要存储什么用户插入验证)(没有日期。

MySQL允许您存储日期的天或月为零。这是方便的,如果你想存储一个生日日期列,你只知道日期的一部分。不允许0月天部分日期、启用NO_ZERO_IN_DATE模式。

MySQL允许您存储的价值“0000-00-00”作为一个假日期。这是在某些情况下更方便使用值。如果一个存储在一个日期日期列不能转换为任何合理价值,MySQL商店“0000-00-00”。对不允许“0000-00-00”,使NO_ZERO_DATE模式。

MySQL检查所有日期和只接受合法的日期(除非覆盖忽略),设置sql_mode系统变量“NO_ZERO_IN_DATE NO_ZERO_DATE”