2015-12-03 102 views
-1
SELECT * 
FROM `reg` 
WHERE registration_date 
BETWEEN '29 /01 /15' 
AND '30 /01 /15' 

我使用这个查询从数据库中提取数据,它给我的数据中获取数据,但是当我改变的日期,例如BETWEEN '29/01/15' AND '06/03/15',它显示没有什么
我正在使用数据类型varchar如何从数据库中按日期使用PHP MySQL的

谁能帮我解决这个问题?

+1

在这里展示你是如何存储在日期表 –

+1

要么使用日期数据类型存储日期或不以RDBMS – Strawberry

回答

0

用途,其中在表日期条件如下作为被保存在“YMD”格式:

WHERE registration_date BETWEEN '2015-01-29' AND '2015-01-30' 
+0

我用这个麻烦,但这种情况在日期数据类型的作品,我使用varchar数据类型 –

+0

没有ü检查存储的数据是哪种格式?例如。它可能是这种格式'2015-11-18 11:26:13'或者它可以是简单的格式,没有时间'2015-11-18'。所以查询可能会影响结果。 – chirag

2

MySQL手册
日期类型用于值与日期的一部分,但没有时间部分。
MySQL的检索并在 'YYYY-MM-DD' 格式显示DATE值。
支持范围为“1000年1月1日”到“9999-12-31”

需要更改格式您用于日期。

尝试

SELECT * FROM reg WHERE registration_date BETWEEN '2015-01-29' AND '2015-01-30' 
0

这里是你的解决方案,我也用这些方法来获得使用最新数据,请您尝试一下mayhelp你: -

$start = date('Y-m-d H:i:s', strtotime('29-01-2015')); 
$end = date('Y-m-d H:i:s', strtotime('30-01-2015')); 

SELECT * 
FROM `reg` 
WHERE registration_date >= $start AND 
registration_date <= $end; 
+0

解决了你的问题? –

+0

是的,但你被串在十六进制编码的前一个月,然后一天,这是很好的比较,与去年的话,但他的数据库存储日期一天,然后再每月今年这样比较十六进制编码将失败。您需要在表格中将其日期字符串转换为年/月/日,然后才能在/之间使用十六进制代码技巧,并且如果*将正确*这样做。我的解决方案更好,因为它使用了坚实的逻辑。 – Ultimater

0

其实你正在使用的数据键入Varchar所以它会介于和之间并不行。它显示你的结果,因为它与二进制数字相比,所以它显示了你在两个二进制数字之间的结果。您需要将您的数据类型更改为日期和时间。

0

您所查询的唯一的作品,因为BETWEEN /对你来说只是检查字符串中使用的字符的是十六进制编码彼此之间。您也将获得一个结果:

SELECT * FROM `reg` WHERE registration_date BETWEEN '29/dur' AND '30/3.13159' 

但是,如果你想对待你的查询关键词,比如实际日期,我建议使用:

SELECT * FROM `reg` 
WHERE str_to_date(registration_date,'%d/%m/%Y') 
BETWEEN 
str_to_date('29/01/15','%d/%m/%Y') AND str_to_date('30/01/15','%d/%m/%Y') 
相关问题