1

有没有办法编写一个相当于

select * from log_table where dt >= 'nov-27-2009' and dt < 'nov-28-2009';

但是您只能指定 1 个日期,并说您想要一整天的结果,直到下一天。

我只是在编造这个,但形式如下:

select * from log_table where dt = 'nov-27-2009':+1;
4

5 回答 5

2

我不相信有一种方法可以移植到所有 RDBMS。

检查我的一个参考资料(SQL Cookbook)表明没有一个 RDBMS 以完全相同的方式解决问题。我建议您查看该书的第 8 章,其中涵盖了 DB2、Oracle、PostgreSQL、MySQL 的所有不同方法。

不过,我不得不在SQLite中处理这个问题,而 SQL Cookbook 并没有解决那个 RDBMS,所以我会在这里稍微提一下。 SQLite 没有日期/时间数据类型;您必须通过存储所有日期/时间数据来创建自己的数据,TEXT并确保您的应用程序强制执行其格式设置。SQLite 确实有一组日期/时间转换函数,允许您添加名义日期/时间,同时将数据维护为字符串。但是,如果您需要将两个持续时间 (HH:MM:SS) 彼此相加,则根据您存储在您视为日期/时间数据的文本列中的数据,您必须编写自己的职能(搜索“定义 SQLite 用户函数”)并在运行时通过调用sqlite3_create_function(). 如果您想要一些添加时间值的用户函数的示例,请告诉我。

于 2009-12-01T21:47:13.780 回答
0

对于 MS SQL Server,请查看DATEPART

/* dy = Day of Year */
select * from log_table where datepart(dy, dt) = datepart(dy, '2009-nov-27');
于 2009-12-01T21:45:17.043 回答
0

使用 SQL Server,您可以

   Select * From table
   Where dt >= DateAdd(day, DateDiff(day, 0, @ParamDate), 0)
      And dt < DateAdd(day, DateDiff(day, 0, @ParamDate), 1)
于 2009-12-01T21:48:55.600 回答
0

只要您正在处理相应数据类型的日期数据类型,以下将起作用:

t.date_column + 1

...将在给定日期上增加一天。但是我还没有找到一个允许将隐式数据类型转换为日期的数据库。

SELECT '12-10-2009' + 1

...将在 SQL Server 上失败,因为 SQL Server 仅在与 datetime 数据类型列进行比较时执行隐式转换。所以你需要使用:

SELECT CONVERT(DATETIME, '12-10-2009') + 1

对于 Oracle,您必须使用该TO_DATE功能;MySQL会使用类似的东西STR_TO_DATE,等等。

于 2009-12-01T22:02:12.087 回答
0

有一列只有日期部分(时间为 00:00:00.000),然后您可以添加 where 子句:WHERE dt = '2009-11-27'

于 2009-12-01T23:59:27.043 回答