[英]SQL Comparing Dates
在数据库表中,我设置了date属性,但是将其类型设置为varchar而不是Date。 我的问题是,我仍然可以在SQL查询中比较这些日期吗?
我数据库中的日期以以下格式存储:
dd / mm / yyyy hh:mm:ss
我必须在PHP中执行如下所示的SQL查询:
SELECT *
FROM DBtable
WHERE DBname='$name' AND date>='01/01/2015' AND date<='01/09/2015';
我将欣赏一个如何做到这一点的例子。 谢谢您的帮助。
您需要转换/广播以进行比较:
SELECT *
FROM DBtable
WHERE DBname='$name'
AND CAST(date AS DATETIME) >='2015-01-01'
AND CAST(date AS DATETIME)<='2015-01-09'
;
最好将值存储为适当的数据类型,以避免这种低效率。 如果要在没有时间部分的情况下进行比较,也可以使用DATE
而不是DATETIME
。 语法和可用的数据类型因数据库而异,因此上述内容可能需要调整。
更新:由于您使用的是MySQL,因此可以使用以下内容:
SELECT *
FROM DBtable
WHERE DBname='$name'
AND STR_TO_DATE(`date`, '%d/%c/%Y') >= '2015-01-01'
AND STR_TO_DATE(`date`, '%d/%c/%Y') <= '2015-01-09'
;
是的,您可以将Varchar
转换为Date
。 这是一个例子:
SELECT
CAST(date_column AS DATETIME)
FROM
TABLE_NAME
在您的情况下,它可能看起来像:
SELECT *
FROM DBtable
WHERE DBname='$name'
AND CAST(date AS DATETIME) >='01/01/2015'
AND CAST(date AS DATETIME) <='01/09/2015';
在进行任何比较之前,可以将varchar
转换为date
或datetime
时间。
但是, 每次将日期与某事进行比较时,您都必须这样做。 这是因为如果将它们与varchar
进行比较,则以下比较都是正确的:
'2/1/2015' > '1/5/2016'
'25/1/2015' > '15/2/2015'
'11/1/2015' < '3/1/2015'
如果您想提取日期的某些基于时间的方面,例如在8:00 AM
之前的任何记录,则还需要进行转换。 如果您的日期是varchar
,则没有简单的方法可以做到这一点。
并假定数据库中的值始终可以解析为日期! 如果一个空字符串或其他类型的数据进入那里,则CONVERT(datetime, MyColumn)
将失败。
因此,我强烈建议您将列更改为date
或datetime
。 这将使您的生活更加轻松。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.