MySQL日期时间比较

MySQL日期时间比较,mysql,datetime,Mysql,Datetime,这是我的问题: 我的mysql数据库中有一个表,其中包含一些产品,它有两列“date_from”和“date_to”,这两列确定了产品处于活动状态的时间段 在我的网站上有一个表单,管理员可以选择两个日期时间值,如果产品的有效期与管理员选择的时间跨度相交,页面将更新产品列表 这是我的查询,我正在使用它来实现我想要的: $sql="SELECT * FROM presents WHERE (date_from>".$date_from." AND date_to<".$date_to."

这是我的问题:

我的mysql数据库中有一个表,其中包含一些产品,它有两列“date_from”和“date_to”,这两列确定了产品处于活动状态的时间段

在我的网站上有一个表单,管理员可以选择两个日期时间值,如果产品的有效期与管理员选择的时间跨度相交,页面将更新产品列表

这是我的查询,我正在使用它来实现我想要的:

$sql="SELECT * FROM presents WHERE (date_from>".$date_from." AND date_to<".$date_to.") OR (date_from>".$date_from." AND date_to>".$date_to.") OR (date_from<".$date_from." AND date_to>".$date_to.") OR (date_from<".$date_from." AND date_to<".$date_to.")";

$sql=“SELECT*FROM”表示的是(日期从>“$date\u-FROM.”和日期到“$date\u-FROM.”和日期到>“$date\u-to.”)或(日期从“$date\u-to.”)或(日期从“.$date\u-FROM.”和日期从“.$date-FROM.”和日期到>“$date\u-to.”或(日期从“.$date-FROM”。$date\u-FROM.”您需要引用变量


但最好不要使用sql,而是使用占位符。

您需要引用您的变量


但最好不要使用sql,而是使用占位符。

我确信您需要将日期用单引号括起来:

date_from > '".$date_from."' AND

我相信您需要将日期用单引号括起来:

date_from > '".$date_from."' AND

您应该将日期括在引号中,如“
”、“$date\u from”。”

编辑:尝试:

$sql="SELECT * FROM presents WHERE '".$date_from."' BETWEEN date_from AND date_to";

您应该将日期括在引号中,如“
”、“$date\u from”。”

编辑:尝试:

$sql="SELECT * FROM presents WHERE '".$date_from."' BETWEEN date_from AND date_to";
如下列文件所述:

MySQL识别以下格式的数据和值:

  • 作为
    'YYYY-MM-DD HH:MM:SS'
    'YY-MM-DD HH:MM:SS'
    格式的字符串。a“松弛”这里也允许使用语法:任何标点符号都可以用作日期部分或时间部分之间的分隔符。例如,
    '2012-12-31 11:30:45'
    '2012^12^31 11+30+45'
    '2012/12/31 11*30*45'
    ,以及
    '2012@12@31 11^30^45'
    是等效的

  • 如果字符串作为日期有意义,则作为
    'YYYYMMDDHHMMSS'
    'YYMMDDHHMMSS'
    格式中没有分隔符的字符串。例如,
    '20070523091528'
    '070523091528'
    被解释为
    '2007-05-23 09:15:28'
    ,但
    '071122129015'
    是非法的(它有一个无意义的分钟部分)并变成
    '0000-00-00 00:00:00'

  • 作为
    YYYYMMDDHHMMSS
    YYMMDDHHMMSS
    格式的数字,前提是该数字作为日期有意义。例如,
    19830905132800
    830905132800
    被解释为
    '1983-09-05 13:28:00'

如果您使用的是字符串格式,则必须确保正确引用字符串。

如中所述:

MySQL识别以下格式的数据和值:

  • 作为
    'YYYY-MM-DD HH:MM:SS'
    'YY-MM-DD HH:MM:SS'
    格式的字符串。a“松弛”这里也允许使用语法:任何标点符号都可以用作日期部分或时间部分之间的分隔符。例如,
    '2012-12-31 11:30:45'
    '2012^12^31 11+30+45'
    '2012/12/31 11*30*45'
    ,以及
    '2012@12@31 11^30^45'
    是等效的

  • 如果字符串作为日期有意义,则作为
    'YYYYMMDDHHMMSS'
    'YYMMDDHHMMSS'
    格式中没有分隔符的字符串。例如,
    '20070523091528'
    '070523091528'
    被解释为
    '2007-05-23 09:15:28'
    ,但
    '071122129015'
    是非法的(它有一个无意义的分钟部分)并变成
    '0000-00-00 00:00:00'

  • 作为
    YYYYMMDDHHMMSS
    YYMMDDHHMMSS
    格式的数字,前提是该数字作为日期有意义。例如,
    19830905132800
    830905132800
    被解释为
    '1983-09-05 13:28:00'


如果您使用的是字符串格式,则必须确保字符串被正确引用。

请尝试使用另一种更类似于:

WHERE OrderDate BETWEEN '01/01/2006' AND '01/02/2006'

来源:

尝试使用另一种更类似于:

WHERE OrderDate BETWEEN '01/01/2006' AND '01/02/2006'

来源:

您正在以
字符串的形式传递日期时间,因此需要使用如下单引号字符对其进行引号:

... (date_from<'".$date_from."' AND date_to>'".$date_to."') ...
…(日期从“”。$date到“”)。。。

或者,您可以将使用的变量的格式更改为数字(在
yyymmddhhmmss
格式中),然后不需要引号

您以
字符串的形式传递日期时间,因此您需要使用单引号字符对其进行引号,如下所示:

... (date_from<'".$date_from."' AND date_to>'".$date_to."') ...
…(日期从“”。$date到“”)。。。

或者,您可以将使用的变量的格式更改为数字(在
yyymmddhhmmss
格式中),然后不需要引用(

这里是SQL的完整版本:)。我已经用您提到的字段创建了测试表,该SQL运行非常适合我--


$sql=“SELECT*FROM”表示的是(日期从>STR\u到日期(“$date\u FROM.”、“%Y-%m-%d%H:%i:%s”)和日期从STR\u到日期(“$date\u FROM.”、“%Y-%m-%d%H:%i:%s”)和日期从>STR到日期(“$date\u到日期(“$date\u到”。%m-%d:%s”)或日期从>STR“,“%Y-%m-%d%H:%i:%s”)和date_to>STR_to_date(“$date_to.”,“%Y-%m-%d%H:%i:%s”)或(date_from
$sql=“SELECT*FROM”表示的是(日期从>STR\u到日期(“$date\u FROM.”、“%Y-%m-%d%H:%i:%s”)和日期从STR\u到日期(“$date\u FROM.”、“%Y-%m-%d%H:%i:%s”)和日期从>STR到日期(“$date\u到日期(“$date\u到”。%m-%d:%s”)。“,“%Y-%m-%d%H:%i:%s”)和日期\u-to>STR\u-to-date(““$date\u-to.”,“%Y-%m”-