我需要从mysql数据库中提取记录,其中所有内容都以文本形式存储。
我应查询的两个字段存储方式类似于此格式的“19671011”类型文本,我需要选择介于和高于的范围。
如何查询检索特定月份记录的文本字段?
select * from recordtable where birthday between () - () and anotherdate < '20081111'
答案 0 :(得分:3)
编辑此内容仅返回某个月的人:
SELECT * FROM recordtable
WHERE (MONTH(CAST(birthday AS DATE)) = 10)
AND CAST(anotherdate AS DATE) < CAST('20081111' AS DATE);
这是SQL日期计算的一个很好的链接: http://mysql-tips.blogspot.com/2005/04/mysql-date-calculations.html
答案 1 :(得分:1)
您可以尝试让MySql将这些字符串值强制转换为日期(假设所有字符串都是8个字符,它应该适用于您需要的比较)。
像这样:
CAST('20081111' AS DATE)
然后您的查询可能会变成这样:
SELECT * FROM recordtable
WHERE CAST(birthday AS DATE) >= CAST('20050405' AS DATE)
AND CAST(birthday AS DATE) <= CAST('20111010' AS DATE)
AND CAST(anotherdate AS DATE) < CAST('20081111' AS DATE);
答案 2 :(得分:0)
这不完全是一个问题,但让我试着回答。如果日期字段总是存储YYYYMMDD的8个字符,那么您可以将字段比较为字符串。
答案 3 :(得分:0)
您还可以在vbigham的解决方案中使用BETWEEN运算符,如下所示:
您可以尝试让MySql将这些字符串值强制转换为日期 (假设所有字符串都是8个字符,它应该适用于 比较你需要的。)
像这样:
CAST('20081111'AS DATE)
然后您的查询可能会变成这样:
SELECT * FROM recordtable
WHERE (CAST(birthday AS DATE) BETWEEN CAST('20050405' AS DATE)
AND CAST('20111010' AS DATE))
AND CAST(anotherdate AS DATE) < CAST('20081111' AS DATE);