SQL比较日期

时间:2015-08-07 15:35:52

标签: mysql sql date compare

在数据库表中我创建了一个日期属性,但是我将它的类型设置为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';

我很感激如何做到这一点的一个例子。 谢谢你的帮助。

3 个答案:

答案 0 :(得分:1)

您需要转换/强制转换为比较:

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'
;

答案 1 :(得分:0)

是的,您可以将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';

答案 2 :(得分:0)

在进行任何比较之前,您可以将varchar转换或转换为datedatetime

但你必须每次都这样做你将日期与某些东西进行比较。这是因为如果将它们比作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)将失败。

因此,我强烈建议您将列更改为datedatetime。它会让你的生活更轻松。