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

PHP-MySQL:从表中获取两个日期之间的行,php,mysql,Php,Mysql,mysql在获取两个日期之间的行时遇到问题 该列为res_birth(VARCHAR),日期看起来像30.11.1970 现在我必须找到生日介于01.01.和10.01.之间的客户,年份不重要 我尝试了许多解决方案,包括: STR_TO_DATE(`res_birthday`, '%d.%m') 但我无法将其与开始和结束日期进行比较 你知道我怎么解决这个问题吗 编辑: 下面是一些代码和下面提到的解决方案,但它不起作用 $query = mysql_query("SELECT * FROM `j

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

该列为
res_birth(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;
    } 
}
$query=mysql\u query(“从'jtmmpl2\u chronoforms\u data\u test\u reserverung'中选择*,其中月份(STR\u截止日期(`resu birth`、'%d.%m.%y'))=5,月日(STR\u截止日期(`resu birth`、'%d.%m.%y'))=10;”;
而($info=mysql\u fetch\u数组($query))
函数createCodeOrg($query){
而($info=mysql\u fetch\u数组($query))
{ 
$code='1
“.$info['res_anrede']”
“.ucfirst($info['res_vorname'])”
“.ucfirst($info['res_nachname'])”
“.ucfirst($info['res_strasse_hnr')”
“.$info['res_plz']”
“.ucfirst($info['res_-ort'])”
“.$info['res_geburtstag']”
';
echo$代码;
} 
}

您的问题是将日期存储为varchar。如果您一直在使用
DATE
DATETIME
字段,则数据库将无法自动执行以下操作:

SELECT ...
FROM ...
WHERE res_birthday BETWEEN 'yyyy-mm-dd' AND 'yyyy-mm-dd'
现在转换字段,问题就基本解决了

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

我相信这就是你想要的:

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

资料来源:

-1“我必须得到客户的生日在01.01到10.01之间,年份不重要。”我的回答仍然有效。转换为本机日期/日期时间将使这变得容易得多。好吧,数据库将无法“自动”执行任何操作:您当然不能以所示的方式在之间使用,并且需要应用进一步的操作来提取日和月部分。不要推荐w3schools.com作为参考。它充满了错误,我同意,通常我不会用它作为参考。然而,在这种情况下,本文是准确的。我认为引用这篇文章没有什么坏处。也许有人会认为这方面的其他东西还可以,但事实并非如此。你可能会认为,在W3schools(多年来)一直受到负面宣传之后,他们会更新自己的网站,以反映正确的使用情况等@MarcelKorpel@Fred-二,嗯,,W3傻瓜网站上曾经有一个错误列表,其中删除了已更正的内容。上一次看到它时,我相信上面提到的错误中大约有40%得到了纠正。我尝试过:选择*FROM
jtmpl2\u chronoforms\u data\u test\u reservereng
其中月份(STR\u TO_DATE(
res\u birth
,'%d.%m.%y')=5,而月日(STR TO_DATE(
res birth
,'%d.%m.%y'))介于1和30之间;但它不工作。它不获取任何行,并在mysql_fetch_array()上给我一个错误。@EugenKochtyrew然后显示您的代码,也许我们可以帮助。免责声明:不要再使用
mysql.*
函数,它们已被弃用。有关详细信息,请参阅。我已稍微更改了表单和代码,现在它可以与您的解决方案配合使用。非常感谢你!