1

将数据库从 Oracle 转换为 SQL Server。我需要类似于 Oracle 让我处理日期的东西:

... WHERE tbl.date_col < sysdate - 1.234

其中 float 代表小数天数(将传入 float 值)。

DATEADD 只接受整数作为第二个参数,所以这不起作用。提前做一些数学然后有

DATEADD(year, ?, DATEADD(month, ?, DATEADD(day, ?, DATEADD(hour, ?, 
  DATEADD(well, you get the picture)))))

请告诉我有一个更优雅和可读的解决方案。:)

4

1 回答 1

3

SQL Server 正在完全放弃此功能。例如,您可以说:

SELECT GETDATE() + 1;

但是您不能再使用较新的日期/时间类型来执行此操作,例如:

SELECT CONVERT(DATE, GETDATE()) + 1;

产量:

消息 206,级别 16,状态 2,第 1 行
操作数类型冲突:日期与 int 不兼容

So I strongly recommend stop using FLOAT and shorthand date math for this. If you are trying to subtract some fractional number of days, convert it to the most important granularity first, and then use DATEADD with that granularity. e.g. the following works just fine:

WHERE tbl.date_col < DATEADD(SECOND, 86400*-1.234, GETDATE());
于 2013-02-12T16:18:29.507 回答