有没有办法编写等同于
的查询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;
答案 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'