我想根据我的$ data输入动态搜索数据库中的日期。DATETIME vs LIKE进行动态搜索SQL
日期存储为日期时间,通常显示为例如“2016-05-11”。
随着MySQL数据库我的条款是:
Select * From Table WHERE (Table.date LIKE '$data%')
因此,如果用户输入“20”的结果将是与20开始。如果用户输入“2016-05”的结果将所有日期是所有以2016-05开始的日期,使我的搜索完美工作。
在Sql Server 2008上部署时,我意识到了两件事。
1)如果我使用LIKE功能这样的
Select * From Table WHERE (Table.date LIKE '%$data$%')
的功能为“2016”的值工作,而是进入了一个值“2016-”时会返回0的结果。
2)如果我使用的功能DATETIME这样
Select * From Table WHERE (DATEPART(year, Table.date) LIKE(OR)= '$data')
该函数将返回正确的值时,$数据= 2016,但将返回nil值时$数据=“201”,例如,因此使其不具动态性。
我在做什么错了?
的问题在于输入验证。如果用户可以输入'20',他们也可以输入''fred'或'2016-02-30'。 –
我使用ajax调用,所以如果他们进入弗雷德。他们不会得到结果。那不是问题?我不是吗? – MakDo