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

时间:2016-07-09 14:17:42

标签: 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

第4个选项,即9/22/58,在某些情况下会返回正确的结果,但在其他情况下则不会。有时,它说没有结果......但是其他时间使用相同的格式但是日期不同,结果将会出现......即使日期都在数据库中正确。我认为这与没有落后的' 0'在9月份之前,加上没有" 19"在" 58"年前。

但是,我似乎无法弄清楚如何使查询搜索能够查找所有选项。此外,它适用于某些情况,如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和其他情况下它能够正常工作?

1 个答案:

答案 0 :(得分:0)

另一种方法是,首先通过php以适当的格式转换日期,然后查询结果。

instance Monad m => Arrow (Kleisli m) where
    arr f = Kleisli (return . f)
    first (Kleisli f) = Kleisli (\ ~(b,d) -> f b >>= \c -> return (c,d))
    second (Kleisli f) = Kleisli (\ ~(d,b) -> f b >>= \c -> return (d,c))