【问题标题】:php search date stringphp搜索日期字符串
【发布时间】:2011-12-13 12:28:59
【问题描述】:

我得到了一些 DOB 格式 yyyy-mm-dd 的客户名单。
如何按出生日期搜索客户,即使我先输入年份或月份或日期,它也会显示结果。

目前,我需要使用格式 yyyy-mm-dd 来搜索它们。

$result = $db->query("SELECT f_name, l_name, dob, email FROM user WHERE dob LIKE'$keyword%' OR f_name LIKE '$keyword%' OR l_name LIKE '$keyword%' LIMIT 100")

if($result) {
  if($db->affected_rows()!= 0){

     // echo the result

  }
}

【问题讨论】:

  • 不完全确定你在这里问什么。您能举几个例子说明您要搜索的内容吗?
  • 附注:通常,affected_rows 返回受 INSERT、DELETE、REPLACE 或 UPDATE 语句影响的行。不过,不是来自 SELECT。
  • @LinusKleen 感谢您的建议
  • 这些日期是存储为 YYYY-MM-DD VARCHAR/CHAR 字段还是 DATE 字段?另外,我是否认为您要以任意格式输入日期作为关键字,例如“DD/MM/YYYY”或“MM/DD/YYYY”?
  • @Wooble 它的日期字段。那是正确的。即使格式不同,您知道如何搜索 DOB 吗?

标签: php mysql date


【解决方案1】:

除了LIKE,您可以使用YEAR()MONTH()DAY() 进行比较。确保你已经正确地逃脱了$keyword...

$result = $db->query("
  SELECT f_name, l_name, dob, email
  FROM user 
  WHERE
    // The year, month, or day can be an exact match (note parentheses)
    (YEAR(dob) = '$keyword' OR MONTH(dob) = '$keyword' OR DAY(dob) = '$keyword')
    // Or the full yyyy-mm-dd date can be an exact match
    OR DATE(dob) = '$keyword'
    // OR UK date format
    OR DATE(dob) = STR_TO_DATE('$keyword', '%d/%m/%y')
    // or the rest of your conditions...
    OR f_name LIKE '$keyword%' OR l_name LIKE '$keyword%' LIMIT 100"
);

编辑:在整数日期组件周围添加引号,以避免在搜索字符串而不是数字时出现语法错误。

【讨论】:

  • 谢谢你真的很有帮助:)。我忘了问什么问题。即使数据库中的日期格式是(yyyy-mm-dd),是否可以使用英国格式(dd/mm/yyyy)搜索 DOB?我该怎么做:)
  • @boyee007 也许通过STR_TO_DATE()。见上面的补充。我不确定如果输入与格式 dd/mm/yy 不匹配,函数调用是否会失败。
【解决方案2】:

在我看来,在 PHP 中规范化日期会更好:

$date = strtotime($keyword);
$result = $db->query('
  SELECT f_name, l_name, dob, email
  FROM user 
  WHERE
    f_name LIKE "$keyword%"
    OR l_name LIKE "$keyword%"
    '.($date&&$date!=-1?'OR dob="'.date('Y-m-d',$date).'"':'').'
  LIMIT 100
');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多