복붙노트

[SQL] SQL에서 병합 기능

SQL

SQL에서 병합 기능

누군가가 SQL의 유착 기능이 어떻게 작동하는지 설명 할 수 있습니까? 구문은 다음과

이 기능에 대한 MSDN 문서는 매우 모호

해결법

  1. ==============================

    1.나는 유착이 ISNULL보다 비용이 많이 드는,하지만 연구가를 표시하지 않는 것을 들었다. ISNULL은 필드가 NULL에 대해 평가되고, 두 개의 매개 변수를 사용하고,이 NULL로 평가되는 경우 결과는 당신이 원하는. COALESCE는 NULL이 아닌 것을 처음 발견 된 값을 매개 변수의 수를 가지고 가고, 돌아갑니다.

    나는 유착이 ISNULL보다 비용이 많이 드는,하지만 연구가를 표시하지 않는 것을 들었다. ISNULL은 필드가 NULL에 대해 평가되고, 두 개의 매개 변수를 사용하고,이 NULL로 평가되는 경우 결과는 당신이 원하는. COALESCE는 NULL이 아닌 것을 처음 발견 된 값을 매개 변수의 수를 가지고 가고, 돌아갑니다.

    여기에 세부 사항 훨씬 더 철저한 설명이있다 http://www.mssqltips.com/sqlservertip/2689/deciding-between-coalesce-and-isnull-in-sql-server/

  2. ==============================

    2.이 문서는 막연한 생각하는 이유를 잘 모르겠어요.

    이 문서는 막연한 생각하는 이유를 잘 모르겠어요.

    그것은 단순히 NULL NOT 모든 매개 변수 하나 하나, 복귀 첫 통해 간다.

    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 ()처럼하지만 여러 매개 변수입니다.

    또한 ISNULL ()가 아니므로-ANSI-SQL,입니다.

  3. ==============================

    3.여기에 내가 유착 보는 방식입니다 ... 잘하면 그것은 의미가 ...

    여기에 내가 유착 보는 방식입니다 ... 잘하면 그것은 의미가 ...

    단순한 형태에서 ....

    합체 (필드 이름, '비우기')

    이가 ... 번역 그래서 "필드 이름은"NULL 인 경우, 단어 "EMPTY"로 필드 값을 채 웁니다.

    지금은 여러 값에 대한 ...

    합체 (하여 FieldName1, FieldName2, 값 2, VALUE3)

    하여 FieldName1의 값이 null 인 경우, FieldName2가 NULL 인 경우, Fieldname2의 값으로 채우기 등 값 2, 그것을 채울

    AdventureWorks2012 샘플 데이터베이스에 대한 테스트 코드의이 조각은 완벽하게 작동 및 유착이 작동하는 방법의 좋은 시각적 인 설명을 제공 :

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

    4.ISNULL 단지 대체보다는 병합에 더 많이있다. 나는 완전히 유착의 공식 "문서"애매하고 인정합니다 동의합니다. 이 글은 많은 도움이됩니다. http://www.mssqltips.com/sqlservertip/1521/the-many-uses-of-coalesce-in-sql-server/

    ISNULL 단지 대체보다는 병합에 더 많이있다. 나는 완전히 유착의 공식 "문서"애매하고 인정합니다 동의합니다. 이 글은 많은 도움이됩니다. http://www.mssqltips.com/sqlservertip/1521/the-many-uses-of-coalesce-in-sql-server/

  5. ==============================

    5.여기에 유착을 포함하는 간단한 쿼리입니다 -

    여기에 유착을 포함하는 간단한 쿼리입니다 -

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

    그것은 addressId와 contactId의 모두가 null 인 사람을 반환합니다.

    병합 기능

    EG

  6. ==============================

    6.합체 () 함수의 간단한 정의 될 수있다 :

    합체 () 함수의 간단한 정의 될 수있다 :

    참고 :이 즉 반환 / 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

  7. ==============================

    7.

    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
    
  8. from https://stackoverflow.com/questions/13366488/coalesce-function-in-tsql by cc-by-sa and MIT license