我在MYSQL数据库中有一个文本字段,其中包含01/01/2014
,06/2014
和2014
我想在范围内执行dd/mm/aaaa
,mm/aa
或aaaa
等搜索。
示例:
01/01/2013至011/01/2014
或
08/2013至09/2014
或
2013年至2014年
有关创建mysql查询的任何帮助吗?
答案 0 :(得分:1)
您可以在查询fieldname BETWEEN '01/01/2013' AND '011/01/2014'
OR
SELECT * FROM theTable
WHERE
fieldname >= '01/01/2013' AND fieldname <= '011/01/2014'
答案 1 :(得分:0)
输入之后,我觉得这可能不是一个完整的解决方案,但我会留在这里。
我的解决方案是修改表结构。
说明保留这些日期的列是:date_in_text_format
。您可以添加其他列,例如:
`date_in_mysql_date_format` date NOT NULL DEFAULT '0000-00-00'
现在每当您在date_in_text_format
列中添加日期时:
解析日期并将其放入date_in_mysql_date_format
列。
解析时,如果dd
不可用,请考虑01
,如果mm
不可用,请将其视为01
。
现在使用您的date_in_text_format
列进行显示。
并使用date_in_mysql_date_format
进行搜索。
答案 2 :(得分:0)
您可以使用mysql函数动态转换日期/时间格式,设置如下别名:
SELECT *,
UNIX_TIMESTAMP(STR_TO_DATE(datestart,'%d.%m.%Y %h:%i:%s')) as conv_datestart,
UNIX_TIMESTAMP(STR_TO_DATE(dateend,'%d.%m.%Y %h:%i:%s')) as conv_dateend
FROM `theTable`
WHERE `fieldname`
LIKE 'WHATEVER'
HAVING (yourdate <= `conv_dateend` AND yourdate >= `conv_datestart`)
ORDER BY `conv_datestart` ASC
LIMIT 0,1;
但是你首先必须根据你的日期时间格式进行调整。这有点脏,并且忽略了在日期时间格式的mysql中正确存储,但它完成了这项工作。