我试图为我的MySQL实现搜索功能。在我的应用程序中,我有一个页面,用户从我的数据库中看到一个表。他几乎看到了你在运行SELECT * FROM table
我的表有整数,字符串和日期时间。我想要的是用户可以在搜索框中键入任何内容,并获取具有用户正在搜索的文本的子字符串的任何行的列表。
首先,我还使用CONCAT
来获取表格行中每列的一个大字符串。这是一个例子:
SELECT Name, Fullname FROM myTable WHERE LOWER(CONCAT(Name, ' ', FullName, ' ') LIKE '%M%');
问题:让我说我想要24.04的每条记录。所以我运行以下代码:
SELECT Name, Fullname, Date FROM myTable WHERE Date LIKE '%24.04%';
问题是列Date不是相同的格式。它存储为2008-24-04 12:26:43
。
我尝试过使用DATE_FORMAT
。但它似乎不起作用
SELECT Name, Fullname, Date FROM myTable WHERE LOWER(CONCAT(Name, ' ', Fullname, ' ', DATE_FORMAT(Date, "%d.%l.%Y"), ' ') LIKE '%22.04%');
注意用户应该能够搜索该表中的任何内容。不仅仅是约会。所以我仍然应该使用LIKE '%XYZ%'
。
我该如何解决这个问题?不允许更改数据库模型上的任何内容。
答案 0 :(得分:3)
您可以使用DAY
和MONTH
函数:
SELECT Name, Fullname, Date FROM myTable WHERE MONTH(Date) = 4 AND DAY(Date) = 24;
最后一个SELECT可以像这样重写:
SELECT Name, Fullname, Date FROM myTable WHERE LOWER(CONCAT(Name, ' ', Fullname, ' ')) LIKE '%22.04%' AND MONTH(Date) = 4 AND DAY(Date) = 22;
但我不明白为什么要根据日期检查姓名
修改强>
在你的问题中,你说你试图格式化日期。在格式字符串中出现错误。您使用DATE_FORMAT(Date, "%d.%l.%Y")
转换为" day.hour.year"。这应该给出正确的结果:DATE_FORMAT("2017-06-15", "%d.%m.%Y")