我很惊讶!以下陈述在SQL SERVER
中是有效的:
SELECT +'ABCDEF'
SQL Server
是否将+
定义为字符串类型的一元
运算符?
我很惊讶!以下陈述在SQL SERVER
中是有效的:
SELECT +'ABCDEF'
SQL Server
是否将+
定义为字符串类型的一元
运算符?
(No column name)
----------------
ABCDEF
(1 row(s) affected)
这相当于在不使用 +
符号的情况下执行 SELECT
语句:
SELECT 'ABCDEF'
+
作为给定字符串上的一元
操作符在运行。然而,在官方的T-SQL
文档中,并没有提到这样的操作符。事实上,在String Operators这个章节中,+
出现在两个字符串操作中,分别是+(字符串连接)
和+=(字符串连接)
;但是都不是一元
操作符。此外,在Unary Operators这个章节中,介绍了三个操作符,只有一个是+(正号)
操作符。然而,对于似乎相关的这一个操作符,很快就变得清楚,这个操作符也与非数值字符串值无关,因为+(正号)
操作符的解释明确说明,该操作符仅适用于数值表达式:“返回数值表达式的值(一元操作符)”。SELECT +'12345'+1
1
,但显然可以是任何其他数额)的总和。(No column name)
----------------
12346
(1 row(s) affected)
+'12345'
被计算为数字。如果是这样,那么为什么这些数字会出现在与字符串相关的函数中,例如 DATALENGTH
、LEN
等等。你可能会看到这样的语句: SELECT DATALENGTH(+'12345')
是相当有效的,它的结果如下:
(No column name)
----------------
5
(1 row(s) affected)
这意味着+'12345'
被解析为字符串而不是数字。这是如何解释的?
其次,类似于以下语句中的带有-
运算符:
`SELECT -'ABCDE'`
`SELECT -'12345'`
Invalid operator for data type. Operator equals minus, type equals varchar.
为什么当使用+
操作符与非数字字符串值错误地结合时,不会生成类似情况的错误?
因此,这两个问题阻止我接受这是文档中引入的相同的+(一元)
操作符的解释。由于在任何其他地方都没有提到它,可能是有意添加到语言中的。也可能是一个bug。
当我们看到像这样的语句时,问题似乎更加严重,因为没有生成错误:
SELECT ++++++++'ABCDE'
+(一元)
操作符来操作字符串的目的会很好。我无法想象它的任何用途!