我有一个查询,我想让用户在数据库中搜索生日。但是,我没有为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和其他情况下它能够正常工作?
答案 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))