在文本输入字段中搜索日期的 MySQL 语法

标签 mysql

我有一个查询,我想让用户在数据库中搜索出生日期。然而,我希望他们能够将其输入为字符串,而不是为 MM、DD、YYYY 设置单独的字段,然后我使用 MySQL 中的 STR_TO_DATE 函数来查找生日并返回具有该生日的人员列表。

由于输入只是一个文本字段,因此可以输入多个选项。例如,以下是人们在搜索中键入的一些方式:

Search MM-DD-YYYY: 
Option 1: 09-22-1958
Option 2: 09/22/1958
Option 3: 9/22/1958
Option 4: 9/22/58

第四个选项,9/22/58,在某些情况下返回正确的结果,但在其他情况下则不然。有时,它说没有结果......但其他时候,使用相同的格式但不同的日期,结果将会出现......即使日期都正确地存在于数据库中。我认为这与 9 月份前面没有尾随的“0”以及“58”年份前面没有“19”有关。

但是,我似乎无法弄清楚如何使查询搜索能够查找所有选项。此外,它在某些情况下有效,例如 8/31/83..,但在其他情况下则无效,例如 9/22/58。

这是查询:

SELECT * FROM database 
      WHERE 
      Birth_Date=STR_TO_DATE(REPLACE('$search', '/', '-'), '%m-%d-%Y') or 
      Birth_Date=STR_TO_DATE(REPLACE('$search', '-', '/'), '%m/%d/%Y')"

看来我在这里遗漏了一些东西。我添加了 STR_TO_DATE 函数、REPLACE 函数来处理/和 - ...但是,我还需要什么才能确保它在 9/22/58 和其他情况下工作?

最佳答案

另一种方法是,首先通过 php 将日期转换为正确的格式,然后查询结果。

$date = "9/22/58"; //user input

$search = date('d-m-Y', strtotime($date));

关于在文本输入字段中搜索日期的 MySQL 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38282744/

相关文章:

java - 无法将 Hibernate 与 MySql Azure 数据库连接

MySQL - 如何使用左连接从 on 子句中的连接表中精确获取一行?

PHP 日期获取微秒精度以匹配 MySQL 列数据类型

mysql - 如何将所有权限授予特定用户到远程ip

php - Mysql查询空值不包含在where条件中

php - Laravel 中如何避免列名冲突?

php - 使用 COALESCE 但列仍然更新

mysql - 如何在两个不同的表中强制执行不同的主键?

mysql - phpMyAdmin: "Choose Field to display"不显示

mysql - 如何将 Tomcat 上运行的 Spring Mvc Hibernate MySql 应用程序推送到 Bluemix 云?