【发布时间】:2016-12-27 08:18:49
【问题描述】:
我们使用了一个非常高级的框架,称为 Instant Developer,其中日期部分被实现为字符串。为了实现一个接口,我将来自 SQL Server 的函数 DATEADD (datepart , number , date ) 添加到我的项目库中。但是当我调用它时,生成的代码例如是
SELECT dateadd('n',90,CONVERT(datetime, DATEREQUEST+TIMEREQUEST))
FROM [Ergo].[dbo].[MANUTENZIONI]
where TICKETMANUTE = 17723
但 SQL Server 引发 ax 异常,因为dateadd() 函数的第一个参数不正确,因为它不应该是字符串而是全局变量。有没有办法转换它?比如:
dateadd(case when 'n'='n' then n end, 90, CONVERT(datetime, DATEREQUEST+TIMEREQUEST))
【问题讨论】:
-
为什么不能生成
dateadd(n,90,CONVERT(datetime, DATEREQUEST+TIMEREQUEST))? -
作为一种解决方法,创建包装函数
dateadd_N(int,datetime),dateadd_D(int,datetime), ... -
因为我的框架不允许我...正如我所写的,日期部分被实现为字符串。所以如果我打电话给
dateAdd(Minutes,90,date),那么 Minutes 会被翻译成 'n'... -
@Serg:这正是我所做的......我只是想拥有一个独特的功能,因为我已经拥有太多的功能......
-
或者创建
MyDateadd(varchar(5),int,datetime),它检查第一个参数并返回正确的dateadd
标签: sql sql-server date datetime dateadd