【问题标题】:SQL Comparing DatesSQL 比较日期
【发布时间】:2015-08-07 15:35:51
【问题描述】:

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

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

【问题讨论】:

  • 你为什么一开始就将它们设为 varchar?我想你总是可以在比较之前将它们转换为日期
  • 如果格式正确,您可以将varchar 转换为date
  • 你用的是什么数据库?
  • 我正在使用 WAMP 进行家庭测试。我使用的数据库是 phpmyadmin

标签: mysql sql date compare


【解决方案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'
;

【讨论】:

  • 我试过了,但是 sql 查询总是什么都不返回。日期的比较似乎没有按预期进行
  • 可能取决于数据库,正如我所提到的。上面在 SQL Server 中的比较有效,因为硬编码的日期被隐式转换为 DATE/DATETIME,因为它正在与另一端的数据类型进行比较。
  • @user1926550 查看更新后的答案,每个数据库处理日期格式的方式不同,MySQL 无法处理CAST() 的格式,因此您需要为其提供具有字符串到日期函数的格式。
  • 好人!现在可以了。谢谢你的帮助。我很感激
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    在进行任何比较之前,您可以将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。它会让你的生活更轻松。

    【讨论】:

      猜你喜欢
      • 2015-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-22
      • 2011-06-15
      • 2021-12-23
      • 2018-08-31
      相关资源
      最近更新 更多