php - 日期列是 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>
解决方案
像这样的查询,然后:
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 列
推荐阅读
- json - 质量管理体系 | ListModel 中的持久内存(存储 ListModel 供以后使用)
- vb.net - 如何在不插入零的情况下将空白 DGV 列默认为数字...相当于字符串的“”?
- mongodb - 得到“MongoError: $or must be an array”,即使它有两个表达式?
- java - 在包上使用 @ParametersAreNonnullByDefault 注释时,IntelliJ 可以自动生成代码以检查参数
- python - 我不明白 screen.fill() 是如何工作的
- javascript - 为什么 IF 语句会影响对象是否被定义?
- python - python3中'from x import variable'的作用是什么
- c++ - 编译器决定不明确的参数
- .net - 使用 Shell.Application 在 zip 文件中为组织创建子文件夹
- sql - 在 SQL 中将序列号从初始项目列表表添加到不带序列号的计数项目表