日期存储为文本查询之间和更高

时间:2011-11-15 20:05:16

标签: mysql sql

我需要从mysql数据库中提取记录,其中所有内容都以文本形式存储。

我应查询的两个字段存储方式类似于此格式的“19671011”类型文本,我需要选择介于和高于的范围。

如何查询检索特定月份记录的文本字段?

select * from recordtable where birthday between () - () and anotherdate < '20081111'

4 个答案:

答案 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);