首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分析内爆铸造

分析内爆铸造
EN

Stack Overflow用户
提问于 2012-08-16 14:50:32
回答 1查看 103关注 0票数 5

我有一个学术场景,我想知道如何分析。

代码语言:javascript
复制
DECLARE @date DATETIME
SET     @date = getDate()
SET     @date = DATEADD(DAY, DATEDIFF(DAY, 0, @date-3), 3)

这将把日期缩短到星期四。

我所被质疑的是有隐含类型的证据。

我认为这三个地方肯定发生了.

代码语言:javascript
复制
DATEADD(
  DAY,
  DATEDIFF(
    DAY,
    0,          -- Implicitly CAST to a DATETIME?
    @date-3     -- I presume the `3` is being implicitly cast to a DATETIME?
  ),
  3             -- Another implicit CAST to a DATETIME?
)

但是,也许,由于03是常量,这是在编译到执行计划期间完成的吗?

但如果3是整数变量,那会有所不同吗?

是否有一种方法可以分析执行计划,或其他方法,以确定这是不需要的?

为了让事情更复杂,我现在不在现场。我在远程帮助一个同事。这意味着我不能直接访问SSMS,等等。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-16 14:58:36

用于查询

代码语言:javascript
复制
DECLARE @date DATETIME  = getDate()
DECLARE @N INT = 3

SELECT  DATEADD(DAY, DATEDIFF(DAY, 0, @date-3), 3)
FROM master..spt_values

SELECT  DATEADD(DAY, DATEDIFF(DAY, 0, @date-@N), @N)
FROM master..spt_values

查看执行计划,计算标量显示如下所示。

查询1

代码语言:javascript
复制
[Expr1003] = Scalar Operator(dateadd(day,datediff(day,'1900-01-01 00:00:00.000',[@date]-'1900-01-04 00:00:00.000'),'1900-01-04 00:00:00.000'))

查询2

代码语言:javascript
复制
[Expr1003] = Scalar Operator(dateadd(day,datediff(day,'1900-01-01 00:00:00.000',[@date]-CONVERT_IMPLICIT(datetime,[@N],0)),CONVERT_IMPLICIT(datetime,[@N],0)))

显示您的怀疑是正确的,它发生在文字值的编译时,但在运行时需要一个int变量的CONVERT_IMPLICIT

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11989854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档