2015-03-02 107 views
1

让我们举个例子吧。SQL Server双引号问题

DATEDIFF功能有这样的签名:

DATEDIFF (datepart , startdate , enddate) 

datepart必须由SQL关键字。可以说,一分钟,我们用这些关键字之一:minute,mi,m

如果我要执行该语句

select datediff(mi,'2012-April-09','2013-April-08') 

它会因为这一个完全相同的效果:

select datediff("mi",'2012-April-09','2013-April-08') 

当这些双引号都满足这是怎么回事?

什么是SQL Server要处理内部双引号中的内容?

+0

你想解决什么问题? – 2015-03-02 09:55:11

+0

[SQL中单引号和双引号之间的区别是什么?](http://stackoverflow.com/questions/1992314/what-is-the-difference-between-single-and-double-quotes-in -sql) – Heinzi 2015-03-02 09:56:54

+1

没有记录指定双引号中的第一个参数。它恰好工作(显然它被解析为一个标识符,所以'[mi]'也会起作用),但是不要使用它。不能保证这将继续在更高版本中工作。 – 2015-03-02 10:08:22

回答

0

SQL Server解释以同样的方式它会封装成一个字符串的选择没有它,或者如果它被包含在其它字符对于使用 - 就像[] - 和与它匹配反对list of valid datediff options。如果它不匹配,那么它会在解析阶段返回一个错误(Msg 155),并且查询将不会运行(这可能会导致查询的其他部分无法运行,如果它是较大脚本的一部分)并且如果它确实匹配,然后它照常继续。

+0

如果是这种情况,那么为什么'select datediff'('mi','2012-April-09','2013-April-08')'不起作用?双引号不是TSQL中的字符串分隔符。 – 2015-03-02 10:15:43

+1

因为字符串不是函数的有效输入。过渡发生在解析中,双引号中的对象被评估为没有它们。在这种情况下,''mi“'和'[mi]'是等价的。 – TZHX 2015-03-02 10:19:22