programing

TSQL에서의 COALESCE 기능

muds 2023. 4. 21. 21:32
반응형

TSQL에서의 COALESCE 기능

TSQL의 COALESCE 기능이 어떻게 기능하는지 설명해 주시겠습니까?구문은 다음과 같습니다.

코알라세(x, y)

이 함수에 대한 MSDN 문서는 상당히 모호합니다.

나는 네가 왜 그 서류들이 모호하다고 생각하는지 모르겠다.

첫 번째 됩니다.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, where-as.ISNULL() 않습니다

COALESCE가 ISULL보다 비용이 적게 든다고 들었습니다만, 조사 결과로는 알 수 없습니다.ISNULL은 NULL에 대해 평가되는 필드와 NULL로 평가되는 경우 원하는 결과를 2개의 파라미터만 사용합니다.COLESCE는 임의의 수의 파라미터를 사용하여 NULL이 아닌 첫 번째 값을 반환합니다.

상세한 것에 대하여는, http://www.mssqltips.com/sqlservertip/2689/deciding-between-coalesce-and-isnull-in-sql-server/ 를 참조해 주세요.

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

ISULL을 대체하는 것 말고도 합병하는 것이 훨씬 더 많다.나는 합병의 공식 문서가 모호하고 도움이 되지 않는다는 것에 완전히 동의한다.이 기사는 많은 도움이 된다.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인 사용자를 반환합니다.

결합 함수

  • 는 인수를 2개 이상 받습니다.
  • 인수는 정수형이어야 합니다.
  • 첫 번째 non-timeout 인수를 반환합니다.

예.

  • couldalesce(module, 1, 2, 3)는 1을 반환합니다.
  • couldalesce(module, null)는 null을 반환합니다.
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

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

meralesce는 왼쪽에서 오른쪽으로 n개의 인수를 취합니다.meralesce는 첫 번째 null 이외의 인수를 선택합니다. 마찬가지로 isull(field, 'field'는 여러 필드를 비교할 수 있는 차이와 meralesce(field, 'field')'와 동일합니다.

언급URL : https://stackoverflow.com/questions/13366488/coalesce-function-in-tsql

반응형