【问题标题】:SQL date StatementSQL日期语句
【发布时间】:2011-01-07 16:25:39
【问题描述】:

我需要一些帮助来弄清楚 SQL 语句。

我知道我想要什么,只是无法表达。

我使用的是php,所以它不需要是exclusivly SQL,它可以充当过滤器。

伪代码

$query="SELECT * FROM MyTable WHERE 'TIS'  is not older than 2 days or empty  = ''$ORDER"; }

如果我以这种格式存储日期 03-12-09 (d,m,y),那么我表中列名中的 TIS。 $ORDER 用于根据来自其他字段而非日期的值对值进行排序。

我在看

SELECT * 
FROM orders
WHERE day_of_order >
(SELECT DATEADD(day,-30, (SELECT MAX(day_of_order) FROM orders)) AS "-30 Days");

但我不认为我在这个正确的轨道上。

谢谢

【问题讨论】:

  • 这是哪个 SQL RDBMS?
  • 我正在使用 MySql。我在本地机器上使用 MAMP 进行开发。
  • 我强烈建议更改 TIS 字段的数据类型,使其成为实际日期。将其存储为 dd-mm-yy 格式的字符串会使根据数据的年龄过滤或排序数据变得更加困难。

标签: sql date filter


【解决方案1】:

尝试以下方法:

SELECT *
  FROM MyTable
  WHERE COALESCE(TIS, SYSDATE) > SYSDATE - INTERVAL '2' DAY
  $ORDER

我不知道您使用的是什么数据库——上面使用了 Oracle 处理时间间隔的方法。如果您使用的是 SQL Server,则应关闭以下内容:

SELECT *
  FROM MyTable
  WHERE COALESCE(TIS, GETDATE()) > DATEADD(Day, -2, GETDATE())
  $ORDER

在 MySQL 中试试这个:

SELECT *
  FROM MyTable
  WHERE COALESCE(TIS, NOW()) > DATE_SUB(NOW(), INTERVAL 2 DAYS)
  $ORDER 

我希望这会有所帮助。

【讨论】:

  • OK,然后尝试 SELECT * FROM MyTable WHERE COALESCE(TIS, NOW()) > DATE_SUB(NOW, INTERVAL 2 DAYS) ORDER BY $ORDER
  • 我什么也得不到。组织这个。 - ORDER BY 不是必需的,因为它包含在 $ORDER 中。 - 我仍然不确定TIS 中预计会出现什么格式的值。 - COALESCE 是什么意思?感谢您的帮助。
  • 我尝试直接运行我的查询,我得到:#1305 - FUNCTION FACT.DATEADD 不存在据我了解,我试图查询数据库名称而不是里面的表? FACT 是我的数据库名称。
  • 这个错误是因为MySQL不支持DATEADD函数。我已将语句的 MySQL 版本放入上面的答案中 - 试一试。 COALESCE 返回其参数列表中的第一个非 NULL 值(当从左到右读取参数列表时)。
  • 感谢您的解释。我仍然无法让它工作,我现在不得不离开。感谢您的帮助。
【解决方案2】:

所以,我在这一切中迷失了。

它是如何解决的:

  • 首先我了解到我使用的语句不受 MySql 支持,这要归功于 Bob Jarvis 的说明。

_ Second 在 vi​​ncebowdren 的评论中,“强烈”建议我将该字段的数据类型更改为 Date,实际上我没有,它是一个字符串。

尝试在具有字符串值的字段上对日期使用 SQL 操作对我来说非常愚蠢。

所以我只是 RTFM:http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html

和:

mysql> SELECT something FROM tbl_name -> WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= date_col;

然后继续将字段值更改为日期。

这是我完美的工作查询:

$query="SELECT * FROM MyTable WHERE DATE_SUB(CURDATE(),INTERVAL 2 DAY) &lt;= TIS OR TIS = 0000-00-00 $ORDER "; }

我要感谢海报的帮助。

【讨论】:

    猜你喜欢
    • 2020-09-30
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-15
    • 1970-01-01
    • 2021-10-30
    • 2017-01-02
    相关资源
    最近更新 更多