IT

TSQL의 COALESCE 함수

lottoking 2020. 8. 6. 22:19
반응형

TSQL의 COALESCE 함수


TSQL에서 COALESCE 기능이 작동하는지 설명 할 수있는 누군가? 구문은 다음과 가변

COALESCE (x, y)

이 기능에 대한 MSDN 문서는 매우 모호합니다.


COALESCE는 ISNULL보다 비용이 적게 들지만 연구에 따르면라고합니다. ISNULL은 두 개의 구독 필드 변수, 즉 NULL로 평가되는 경우 결과 만 취합니다. COALESCE는 임의의 수의 매개 변수를 사용하며 NULL이 아닌 첫 번째 값을 리턴합니다.

자세한 내용은 여기 http://www.mssqltips.com/sqlservertip/2689/deciding-between-coalesce-and-isnull-in-sql-server/ 에 대한 자세한 설명이 있습니다 .


문서가 모호 생각 왜하는지 잘 모르겠습니다.

모든 변수를 차례로 통과하고 첫 번째 번째 변수를 반환합니다 NOT NULL.

COALESCE(NULL, NULL, NULL, 1, 2, 3)
=> 1


COALESCE(1, 2, 3, 4, 5, NULL)
=> 1


COALESCE(NULL, NULL, NULL, 3, 2, NULL)
=> 3


COALESCE(6, 5, 4, 3, 2, NULL)
=> 6


COALESCE(NULL, NULL, NULL, NULL, NULL, NULL)
=> NULL

거의 모든 매개 변수를 허용하지만 동일한 데이터 형식이어야합니다. (동일한 데이터 유형이 아닌 경우, 데이터 유형 우선 순위를 사용하여 암시 적으로 적절한 데이터 유형으로 캐스트 됩니다.)

ISNULL()두 개가 아닌 여러 차례의 변수 추가합니다.

또한 존재하는 ANSI-SQL곳에 ISNULL()있습니다.


COALESCE를 보는 방법은 다음과 같습니다.

단순한 형태로….

Coalesce (필드 이름, '빈')

"FieldName"이 NULL이면 "EMPTY"라는 단어로 필드 값을 채입니다.

이제 다중 값의 경우 ...

합체 (FieldName1, FieldName2, Value2, Value3)

Fieldname1의 값이 null이면 Fieldname2의 값으로 채우고 FieldName2가 NULL이면 Value2 등으로 채우십시오.

AdventureWorks2012 데이터베이스에 대한이 테스트 코드 는 완벽하게 작동하며 COALESCE 작동 방식에 대한 샘플 인 설명을 제공 합니다.

SELECT Name, Class, Color, ProductNumber,
COALESCE(Class, Color, ProductNumber) AS FirstNotNull
FROM Production.Product

ISNULL을 대체하는 것보다 더 많은 통합이 필요합니다. 나는 합병에 대한 공식적인“문서”가 모호하고 도움이되지 않는다. 이 기사는 많은 도움이됩니다. http://www.mssqltips.com/sqlservertip/1521/the-many-uses-of-coalesce-in-sql-server/


다음은 병합을 포함하는 간단한 쿼리입니다.

select * from person where coalesce(addressId, ContactId) is null.

addressId와 contactId가 모두 널인 사람을 리턴합니다.

합체 기능

  • 최소한 두 개의 인수를 취합니다.
  • 인수는 정수 유형이어야합니다.
  • 널이 아닌 첫 번째 인수를 리턴합니다.

예 :

  • 합체 (null, 1, 2, 3)는 1을 반환합니다.
  • coalesce (null, null)는 null을 반환합니다.

Coalesce () 함수 의 가장 간단한 정의는 다음과 같습니다.

Coalesce () 함수는 전달 된 모든 인수를 평가 한 다음 NULL로 평가되지 않은 인수의 첫 번째 인스턴스 값을 반환합니다.

참고 : 모든 매개 변수를 평가합니다. 즉, 반환 된 / NOT NULL 매개 변수의 오른쪽에있는 인수 평가를 건너 뛰지 않습니다.

통사론:

Coalesce(arg1, arg2, argN...)

주의 : NULL로 평가되는 인수를 제외하고 다른 모든 (NOT-NULL) 인수는 동일한 데이터 유형이거나 일치하는 유형 (호환 가능한 데이터 유형으로 "암묵적으로 자동 변환"될 수 있음) 이어야합니다. 예제 참조 이하:

PRINT COALESCE(NULL, ('str-'+'1'), 'x')  --returns 'str-1, works as all args (excluding NULLs) are of same VARCHAR type.
--PRINT COALESCE(NULL, 'text', '3', 3)    --ERROR: passed args are NOT matching type / can't be implicitly converted.
PRINT COALESCE(NULL, 3, 7.0/2, 1.99)      --returns 3.0, works fine as implicit conversion into FLOAT type takes place.
PRINT COALESCE(NULL, '1995-01-31', 'str') --returns '2018-11-16', works fine as implicit conversion into VARCHAR occurs.

DECLARE @dt DATE = getdate()
PRINT COALESCE(NULL, @dt, '1995-01-31')  --returns today's date, works fine as implicit conversion into DATE type occurs.

--DATE comes before VARCHAR (works):
PRINT COALESCE(NULL, @dt, 'str')      --returns '2018-11-16', works fine as implicit conversion of Date into VARCHAR occurs.

--VARCHAR comes before DATE (does NOT work):
PRINT COALESCE(NULL, 'str', @dt)      --ERROR: passed args are NOT matching type, can't auto-cast 'str' into Date type.

HTH


declare @store table (store_id varchar(300))
insert into @store 
values ('aa'),('bb'),('cc')
declare @str varchar (4000)
select @str = concat(@str+',',store_id) from @store
select @str

참고 URL : https://stackoverflow.com/questions/13366488/coalesce-function-in-tsql

반응형