PHP - MySQL:从表中获取两个日期之间的日期行

时间:2013-12-13 15:04:21

标签: php mysql

我遇到了mysql在两个日期之间获取行的问题。

列为res_birthday (VARCHAR),日期显示为30.11.1970

现在我必须让生日在01.01.10.01.之间的客户,年份并不重要。

我尝试了许多解决方案:

STR_TO_DATE(`res_birthday`, '%d.%m')

但我无法将其与开始和结束日期进行比较。

知道如何解决这个问题吗?

编辑:

以下是一些使用下面提到的解决方案的代码,但它不起作用。

$query = mysql_query("SELECT * FROM `jtmpl2_chronoforms_data_test_reservierung` WHERE MONTH(STR_TO_DATE(`res_birthday`, '%d.%m.%y')) = 5 AND DAYOFMONTH(STR_TO_DATE(`res_birthday`, '%d.%m.%y')) = 10;");

     while($info = mysql_fetch_array( $query )) 



    function createCodeOrg($query){
     while($info = mysql_fetch_array( $query )) 
    { 
        $code = '<tr>
                            <td>'.$info['res_anrede'].'</td>
                        <td>'.ucfirst($info['res_vorname']).'</td>
                        <td>'.ucfirst($info['res_nachname']).'</td>
                        <td>'.ucfirst($info['res_strasse_hnr']).'</td>      
                        <td>'.$info['res_plz'].'</td>               
                        <td>'.ucfirst($info['res_ort']).'</td>
                        <td>'.$info['res_geburtstag'].'</td>    
                        <td><a href="mailto:'.$info['res_email'].'">'.$info['res_email'].'</a></td>                 

                      </tr>';

    echo $code;
    } 
}

3 个答案:

答案 0 :(得分:2)

select * from your_table
where MONTH(STR_TO_DATE(res_birthday, '%d.%m.%Y')) = 1
and DAYOFMONTH(STR_TO_DATE(res_birthday, '%d.%m.%Y')) between 1 and 10

SQLFiddle demo

答案 1 :(得分:1)

您的问题是您将日期存储为varchars。如果您使用DATEDATETIME字段,这会移除数据库的自动功能:

SELECT ...
FROM ...
WHERE res_birthday BETWEEN 'yyyy-mm-dd' AND 'yyyy-mm-dd'

立即转换您的字段,您的问题基本消失。

答案 2 :(得分:-1)

我相信这就是你要找的东西:

SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;

来源:http://www.w3schools.com/sql/sql_between.asp