首页 > 解决方案 > 日期列是 varchar 如何选择从 01-01-2019 到今天的数据

问题描述

我在获取数据时遇到问题。日期保存在 VARCHAR 中,这意味着它将成为字符串。我想在我的表中选择从 01-01-2019 到今天的数据。所以我在哪里上课有问题。

请检查下面我试图获取数据的代码,但它仍然无法正常工作。我正在使用STR_TO_DATE(holiday_date, '%d-%m-%Y')将格式字符串更改为日期列。

<?php 
echo  $edate=date('d-m-Y');
$query="SELECT * FROM holidays where STR_TO_DATE(holiday_date, '%d-%m-%Y')='$edate' ORDER BY STR_TO_DATE(holiday_date, '%d-%m-%Y') asc ";
$stmt=$conn->prepare($query);
$stmt->execute();
$i=1;
    while ($result = $stmt->fetch()) {
    ?>
<tr class="holiday-completed">
    <td><?php echo $i;?></td>
    <td style="display: none;"><?php echo $result['id'];?></td>
    <td><?php echo $result['title'];?></td>
    <td><?php echo $result['holiday_date'];?></td>
    <td>
        <?php $s=$result['holiday_date'];
                $sdate = strtotime($s);
                echo date('l',$sdate);
        ?>
    </td>

标签: phpmysqlsql

解决方案


像这样的查询,然后:

SELECT * 
FROM holidays 
WHERE STR_TO_DATE(holiday_date, '%d-%m-%Y') BETWEEN STR_TO_DATE('01-01-2019', '%d-%m-%Y') AND NOW()
ORDER BY STR_TO_DATE(holiday_date, '%d-%m-%Y') asc

但实际上,您应该整理数据;

  • 创建一个日期类型的新列,
  • 运行类似UPDATE table SET holiday_date_PROPER = STR_TO_DATE(holiday_date, '%d-%m-%Y')预填充的查询
  • 创建一个触发器将字符串转换为日期一次(在插入或更新时),以便将来的插入和更新也得到处理,
  • 查询日期列而不是 varchar 列(保存每次运行选择查询时所需的数百次转换 - 在您的应用程序的生命周期中,它将节省数百万次转换),
  • 将您的应用切换为使用日期列,
  • 删除 varchar 列

推荐阅读