Sql速记日期

时间:2009-12-01 21:42:17

标签: sql shorthand

有没有办法编写等同于

的查询
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;

5 个答案:

答案 0 :(得分:2)

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

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

我必须在 SQLite 中处理这个问题,而且SQL Cookbook没有解决那个RDBMS,所以我在这里稍微提一下。 SQLite没有日期/时间数据类型 ;您必须通过将所有日期/时间数据存储为TEXT来创建自己的数据,并确保您的应用程序强制执行其格式化。 SQLite确实有一组date/time conversion functions,允许您在将数据保持为字符串的同时添加名义日期/时间。但是,如果您需要相互添加两个持续时间(HH:MM:SS),根据您存储在文本列中的数据,您将其视为日期/时间数据,则必须{{3 (搜索“定义SQLite用户函数”)并在运行时通过调用sqlite3_create_function()将它们附加到数据库。如果你想要一些添加时间值的用户函数的例子,请告诉我。

答案 1 :(得分:0)

对于MS SQL Server,请查看DATEPART

/* dy = Day of Year */
select * from log_table where datepart(dy, dt) = datepart(dy, '2009-nov-27');

答案 2 :(得分:0)

使用SQL Server,您可以

   Select * From table
   Where dt >= DateAdd(day, DateDiff(day, 0, @ParamDate), 0)
      And dt < DateAdd(day, DateDiff(day, 0, @ParamDate), 1)

答案 3 :(得分: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等的东西

答案 4 :(得分:0)

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