gpt4 book ai didi

SQL Server : +(unary) operator on non-numeric Strings

转载 作者:行者123 更新时间:2023-12-04 23:44:05 25 4
gpt4 key购买 nike

我很惊讶!以下声明适用于 SQL SERVER :

SELECT  +'ABCDEF'

SQL Server定义 +作为 Unary字符串类型的运算符?

最佳答案

这是我自己对这个问题的回答(另请参阅最后的更新):

不,在 String 表达式上没有定义这样的一元运算符。这可能是一个错误。

解释:

给定的语句是有效的,它生成以下结果:

(No column name) 
----------------
ABCDEF
(1 row(s) affected)

这相当于做 SELECT不使用 + 的语句标志:
SELECT  'ABCDEF'

编译没有报错,实际上执行成功,给人的感觉是 +作为 Unary 运营对给定字符串的操作。但是,在官方 T-SQL文档中,没有提到这样的操作符。事实上,在标题为“ String Operators”的部分中, +出现在两个字符串操作中,它们是 + (String Concatenation)+= (String Concatenation) ;但也不是 Unary手术。另外,在标题为“ Unary Operators”的部分中,引入了三个运算符,其中只有一个是 + (Positive)。运算符(operator)。然而,对于这唯一一个似乎相关的操作符,很快就会发现这个操作符也与非数字字符串值无关,作为对 + (Positive) 的解释。运算符明确声明此运算符仅适用于数值:“ Returns the value of a numeric expression (a unary operator)”。

也许,这个运算符是为了成功接受那些被成功评估为数字的字符串值,例如这里使用的那个:
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.

为什么,当 + 时,它不应该为类似情况生成错误。运算符被错误地用于非数字字符串值?

所以,这两个问题使我无法接受这是相同的解释 + (unary)已在数值文档中引入的运算符。由于在其他任何地方都没有其他提及,可能是故意将其添加到语言中。可能是一个错误。

当我们看到这样的语句没有生成错误时,问题看起来更严重:
SELECT ++++++++'ABCDE'

我不知道是否有任何其他编程语言接受这些类型的语句。但是如果有的话,很高兴知道他们使用 + (unary) 的目的是什么。应用于字符串的运算符。我无法想象任何用法!

更新

这里说这是早期版本中的一个错误,但由于向后兼容,它不会被修复:

After some investigation, this behavior is by design since + is an unary operator. So the parser accepts "+ , and the '+' is simply ignored in this case.Changing this behavior has lot of backward compatibility implications so we don't intend to change it & the fix will introduce unnecessary changes for application code.

关于SQL Server : +(unary) operator on non-numeric Strings,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13218892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com