2011-08-29 60 views
3

我试图用PHP从MySQL服务器提取数据。该信息具有像这样的日期字段YYYYMM(fx。201108)。我的问题是,如果我想返回特定年份的前半部分或后半部分,SQL查询将如何查看?我已经厌倦了这样的事情,但是每种不超过似乎被忽略:使用PHP中的两个变量在MySQL中的相同位置

SELECT * FROM `poster` WHERE mdr LIKE '2011%' AND mdr < '%06' 

恐怕谷歌havnt了太多的帮助我。

+1

你线程它像一个字符串。所以你不能使用'<' – Fender

+0

你确切想要什么? '20'和'11'?那么你存储该日期的字段的'datatype'是什么? – diEcho

+0

如果您将日期存储为字符串,那么对您不利。你应该使用'DATETIME'数据类型。然后你可以简单地使用'<' and '>'比较日期。 –

回答

1

你可以这样做,但不能与VARCHAR或TEXT:

SELECT * FROM `poster` WHERE mdr < '201106' AND mdr > '201100' 
+0

+1,这也将允许MySQL在字段'mdr'上继续使用索引。 – Johan

+0

在这种情况下,您还可以这样做:'SELECT * FROM poster where mdr BETWEEN'201101'and'201105'' – Johan

+0

您的代码也可以与Varchar一起使用。 – Johan

1

尝试届如下因素:

SELECT * FROM `poster` WHERE mdr LIKE '2011%' AND MONTH(STR_TO_DATE(mdr, '%Y%m')) < 06 
+0

-1,mdr是一个字符串字段,不是日期。 – Johan

+0

的确,我添加了str_to_date –

0

TRY(假设数据类型是varchar

SELECT SUBSTRING('YYYYDDMM',FROM 0 FOR 2) AS firstHalf, 
     SUBSTRING('YYYYDDMM',FROM 2 FOR 2) AS SecondHalf 
FROM yourTable 

参考文献

1

您只能使用%_通配符与LIKE声明。
这会起作用,但是在字段上使用任何函数都会导致任何使用索引的机会,从而减慢速度。

SELECT * FROM poster WHERE mdr LIKE '2011%' AND right(mdr,2) > '06' 

参见:
http://dev.mysql.com/doc/refman/5.0/en/string-functions.html

+0

这很好,谢谢。当我开始制作自己的数据库时,请确定考虑使用什么数据类型:) – Lars

+0

好吧,但是这个似乎更容易与PHP一起使用?以一年为变数。 – Lars

相关问题