MYSQL在开始结束日期日期格式d-m-Y之间选择[重复]

Posted

技术标签:

【中文标题】MYSQL在开始结束日期日期格式d-m-Y之间选择[重复]【英文标题】:MYSQL Select between start end date date format d-m-Y [duplicate] 【发布时间】:2018-07-03 06:55:25 【问题描述】:

如果我在 mysql 中这样做,它可以工作:

    SELECT * FROM reservations
WHERE
reservationStartDate >= '2018-01-01' 
AND
reservationEndDate <= '2018-02-16'
AND
reservationSpace = 'kantoor-1'

所以我想做一个这样的函数:

        public function checkReservations($startdate, $enddate, $workspace, $bind="") 
            //SELECT * FROM reservations WHERE reservationStartDate >= '2018-01-19' AND reservationEndDate <= '2018-02-01' AND reservationSpace = 'kantoor-1';
            // Date format = 2018-12-31
    $sql = "
            SELECT * FROM DATABASENAME.reservations
            WHERE
            reservationStartDate >= '".$startdate."' 
            AND
            reservationEndDate <= '".$enddate."'
            AND
            reservationSpace = '".$workspace."'
            "
            ;               
    $this->run($sql,$bind);
       

我在 php 中使用:

$test2 = $db->checkReservations('2018-01-01', '2018-02-16', 'kantoor-1');

echo '<pre>'.print_r($test2,true).'</pre>';

什么都没有……顺便说一句,我已经将日期格式更改为 Y-m-d

【问题讨论】:

尝试:条件mysql之间。 reservationStartDate的数据类型是什么 请检查 SQL 数据库中“reservationStartDate”和“reservationEndDate”列的类型 @DeadManAlive,你怎么敢?!?我在提问后的 2 分钟内写下了我的答案,上面的链接是在我的答案之后添加的...... @user2342558 怎么了??以及您所说的上面的帖子已添加。我设置为重复的链接早于几个月/几年。不在2 minutes:P 【参考方案1】:

您可以使用STR_TO_DATE MySQL 函数:

SELECT * FROM reservations 
WHERE reservationStartDate 
BETWEEN STR_TO_DATE('22-01-2018', '%d-%m-%Y') 
        AND STR_TO_DATE('03-02-2018', '%d-%m-%Y')

BETWEENSTR_TO_DATE

BETWEENreservationStartDate &gt;= '22-01-2018' AND reservationStartDate &lt;= '03-02-2018' 的更好形式(在速度方面也是如此),但在您的情况下,它仅适用于STR_TO_DATE 将“dmY”字符串转换为真实日期格式以让 MySQL 处理它。

DATE 类型字段

您可以做的最好的事情是使用DATE 类型字段来存储日期,这样您就不再需要STR_TO_DATE

【讨论】:

【参考方案2】:

试试这个:

SELECT * FROM reservations WHERE reservationStartDate >= '22-01-2018' 
AND reservationEndDate<= '03-02-2018'

【讨论】:

SELECT * FROM reservations WHERE reservationStartDate BETWEEN STR_TO_DATE('01-01-2017', '%d-%m-%Y') AND reservationEndDate STR_TO_DATE('01-01-2019', '% d-%m-%Y') 这给出了一个错误。我想获取开始和结束日期 @Gurdt 请发布您的 mysql 错误。【参考方案3】:

如果您需要从日期范围内的MySQL database 表中选择行,则需要使用如下命令:

SELECT * FROM table 
WHERE date_column >= '2014-01-01' AND date_column <= '2015-01-01';

您可以使用STR_TO_DATE() 将您的字符串转换为MySQL 日期值:

SELECT * FROM reservations 
WHERE reservationStartDate BETWEEN STR_TO_DATE('22-01-2018', '%d-%m-%Y') AND STR_TO_DATE('03-02-2018', '%d-%m-%Y')

但是,明智的做法是将该列转换为 DATE data type,而不是使用字符串。

【讨论】:

以上是关于MYSQL在开始结束日期日期格式d-m-Y之间选择[重复]的主要内容,如果未能解决你的问题,请参考以下文章

MySQL:开始日期和结束日期之间的日期的 IN 子句?

MySQL - 如何查找日期在开始日期到结束日期之间的记录

如何设置开始日期和结束日期之间的验证应在 3 年内选择

Laravel - 使用 eloquent 在开始日期和结束日期之间选择行

如何对位于开始日期和结束日期之间的一组值求和?

选择给定开始日期和结束日期之间的天数