놀랍습니다! 아래의이 문장은 SQL SERVER
에 유효합니다SQL Server : 숫자가 아닌 문자열의 + (단항) 연산자
SELECT +'ABCDEF'
는 SQL Server
문자열 유형에 대한 Unary
연산자로 +
을 정의 했습니까?
놀랍습니다! 아래의이 문장은 SQL SERVER
에 유효합니다SQL Server : 숫자가 아닌 문자열의 + (단항) 연산자
SELECT +'ABCDEF'
는 SQL Server
문자열 유형에 대한 Unary
연산자로 +
을 정의 했습니까?
여기이 질문에 대한 내 자신의 대답이다 (또한 마지막 업데이트 참조) :
없음을, 문자열 식에 정의 된 같은 단항 연산자는 없다. 이것은 버그 일 수 있습니다.
설명 :
주어진 문장은 유효하며 아래의 결과를 생성합니다
(No column name)
----------------
ABCDEF
(1 row(s) affected)
+
기호 사용하지 않고 SELECT
문을 수행하는 것과 같습니다
SELECT 'ABCDEF'
을 실제로 오류가 발생하지 않고 컴파일되면서이라는 인상을줍니다.은 주어진 문자열에서 Unary
연산으로 작동합니다. 그러나 공식 T-SQL
설명서에는 이러한 연산자에 대한 언급이 없습니다. 사실, "String Operators"이라는 제목의 섹션에서 + (String Concatenation)
과 += (String Concatenation)
인 두 개의 문자열 연산에 +
이 나타납니다. 둘 다 Unary
작업입니다. 또한 "Unary Operators"섹션에는 3 가지 연산자가 도입되었으며 그 중 하나만 + (Positive)
연산자입니다. 그러나 관련성이있는 것으로 보이는이 연산자에 대해서는 + (Positive)
에 대한 설명에 명시 적으로이 연산자가 숫자 값에만 적용 가능하다고 명시되어 있으므로이 연산자도 숫자가 아닌 문자열 값과 아무 관련이 없습니다. "Returns the value of a numeric expression (a unary operator)". 아마도
SELECT +'12345'+1
위의 문을 실행, 그것은 숫자를 생성 하지만, 분명히 다른 양이 될 수 여기 1
인 다수 그것에 추가 numberic 값으로 평가 모두 주어진 문자열의 합 출력에 그러나
(No column name)
----------------
12346
(1 row(s) affected)
는 I이 의심 설명은 다음과 같은 질문에 제기 된대로 정확합니다.
첫 번째로이 설명이 사실이라고 인정하면 +'12345'
과 같은 표현이 숫자로 평가된다는 결론을 내릴 수 있습니다. 그렇다면이 숫자가 DATALENGTH
, LEN
등과 같이 문자열 관련 함수에 나타날 수있는 이유는 무엇입니까?
SELECT DATALENGTH(+'12345')
은 아주 유효하며 아래의 결과 : 당신은 이와 같은 진술을 볼 수 +'12345'
을 의미
(No column name)
----------------
5
(1 row(s) affected)
이 문자열이 아닌 숫자로 평가되고있다. 어떻게 설명 할 수 있습니까?
둘째 반면, 이와 같은 -
연산자와 마찬가지로 문 :
`SELECT -'ABCDE'`
또는이 :
`SELECT -'12345'`
은 아래 오류 발생 :
Invalid operator for data type. Operator equals minus, type equals varchar.
이유는 shouldn 유사한 경우에 오류가 발생합니다. +
연산자 숫자가 아닌 문자열 값에 잘못 사용 되었습니까?
그래서이 두 질문은 숫자 값에 대한 설명서에 소개 된 + (unary)
연산자와 동일한 설명을 수락하지 못하게합니다. 다른 곳에서는 언급하지 않으므로 의도적으로 언어에 추가 될 수 있습니다. 버그 일 수 있습니다.
문제는 우리가 오류가 이와 같은 진술에 대해 생성되지 볼 때 더 심각한 것으로 보이는 하나 하나 :
SELECT ++++++++'ABCDE'
이러한 종류의 동의 거기에 다른 프로그래밍 언어가 있는지 모르겠어요 의 진술. 그러나 존재한다면 어떤 목적으로 문자열에 적용된 + (unary)
연산자를 사용하는 것이 좋을 것입니다. 나는 어떤 사용법을 상상할 수 없다!
UPDATE 여기
는이 이전 버전의 버그되었습니다하지만 때문에 이전 버전과의 호환성의 고정되지 않습니다 말합니다 따라 문자열에 단항 연산자가있다
https://connect.microsoft.com/SQLServer/feedback/details/718176/concatenation-operator-not-working-properly –
당신은 이것을 의미합니까? "조사 후에는 +가 단항 연산자이므로이 동작이 의도적으로 설정되어 있으므로 파서는"+ "을 허용하며이 경우 '+'는 무시됩니다. 이 동작을 변경하면 이전 버전과의 호환성에 많은 영향을 미치므로이를 변경하지 않고 응용 프로그램 코드에 불필요한 변경 사항을 적용하게됩니다. " –
RGO
예. 다른 응답을 인용 한 후에 게시되었으므로 적어도 MS가이 점에 관해서는 버그가 아니라 "의도적으로 설계된 것"입니다. "수정하지 않겠습니다"보다는 "설계 상으로는"닫힙니다. –