【问题标题】:Using BETWEEN for dates stored as string in MySQL使用 BETWEEN 在 MySQL 中存储为字符串的日期
【发布时间】:2019-01-11 01:07:47
【问题描述】:

我目前正在处理的数据库表中的日期字段是 varchar 形式,并以 dd.mm.yyyy 格式给出。

例如日期:03.02.2018

上面有屏幕

所以当我使用 ajax 发送数据时无法正常工作。

下面有代码

function clean($data) {
    global $con;
    $data = mysqli_real_escape_string($con, strip_tags($data));
    return $data;
}
$start_date = clean($_POST['start']);
$end_date   = clean($_POST['end']);

if (isset($start_date) && isset($end_date)) {
    $get_date = "SELECT * FROM records WHERE reservations BETWEEN '$start_date' AND '$end_date' ";
}

开始日期和结束日期相同,例如今天或昨天。但是当日期不同时不起作用,例如开始日期:03.02.2018 结束日期:03.03.2018

最好的问候

谢谢。

【问题讨论】:

  • 这不是数据库中的实际date-字段,是吗? MySQL 以以下格式存储日期:YYYY-MM-DD.
  • 您不能在 MySQL 中将 BETWEEN 用于 varchar 列类型,您需要一些解决方法。
  • 另外,避免将日期存储为字符串,这是不好的做法
  • @Magnus Eriksson 是列不是日期格式,它是 varchar 存储日期/ MySQL 以相同的 DD.MM.YYYY 格式存储日期

标签: php mysql date


【解决方案1】:

如果您使用DATE 列类型而不是varchar,您将在未来解决这个问题和其他问题。这将让您在 MySQL 中使用日期函数。

如果由于某种原因您不能或不愿意在执行 BETWEEN 之前将列转换为日期:

SELECT * FROM records 
WHERE STR_TO_DATE(reservations,'%d.%m.%Y') 
BETWEEN '$start_date' AND '$end_date';--Don't use variables directly

此外,您不希望在数据库查询中使用原始输入。恶意用户可能会向您的数据库发送 SQL 并造成损害。

最好使用转义,甚至对用户参数化查询更好。这个网站上有一些问题可以帮助解决这个问题。

【讨论】:

  • 这对于这种情况来说是一个很好的解决方案,但是如果可能的话,首先应该避免将日期作为字符串存储在数据库中。
  • @Jim 更改代码时出现此错误您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的 'STR_TO_DATE('01,5,2013','%d.%m.%Y') BETWEEN '' AND ''' 附近使用正确的语法
  • 我已将其切换为使用预订字段,但这对我有用。
【解决方案2】:

您的 SQL 查询使用的是“reservations”表,但在图像中,您使用的是“rezervasyon_tarihi”。 也许应该是“SELECT * FROM records WHERE rezervasyon_tarihi BETWEEN '$start_date' AND '$end_date'”;

所以,我认为这个话题会对你有所帮助SQL Between clause with strings columns

【讨论】:

  • 好的,谢谢您的建议。我知道有类似的情况列。但现在我不在图片栏上工作。再次感谢您。
猜你喜欢
  • 2015-06-20
  • 2019-01-06
  • 1970-01-01
  • 2020-10-18
  • 2021-11-23
  • 2015-04-27
  • 2013-02-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多