복붙노트

[SQL] 어떻게 포스트 그레스 SELECT의 열을 연결하는?

SQL

어떻게 포스트 그레스 SELECT의 열을 연결하는?

나는 테이블 foo는 두 개의 문자열 열 a와 b가 있습니다.

을 선택, foo는 반환에서 b를 a와 b 값. 그러나 A와 B의 연결이 작동하지 않습니다. 나는 시도했다 :

select a || b from foo

select  a||', '||b from foo

댓글에서 업데이트 : 모두 열 형식 문자 (2)입니다.

해결법

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

    1.(나중에 언급 한 바와 같이) 문자 (2)와 같은 문자열 형식의 컬럼으로 표시되는 연결은 설명서를 인용, 때문에 작동합니다 :

    (나중에 언급 한 바와 같이) 문자 (2)와 같은 문자열 형식의 컬럼으로 표시되는 연결은 설명서를 인용, 때문에 작동합니다 :

    굵게 강조 광산. 제 2 예 (A || ','|| B foo는에서 선택) 유형이 지정되지 않은 문자열 리터럴 텍스트 어떤 경우에 전체 표현식이 유효하게 입력하기 ','기본값 이후 모든 데이터 유형에 적용됩니다.

    문자열이 아닌 데이터 유형의 경우, 텍스트 적어도 하나 개의 인수를 캐스팅하여 "수정"1 문 수 있습니다. (모든 유형은 텍스트에 캐스트 할 수 있습니다)

    SELECT a::text || b AS ab FROM foo;
    

    자신의 대답으로 판단, 평균 "반환 NULL"로되어 있었다 "하지 작업은하지 않습니다." NULL에 연결된 아무것도의 결과는 NULL이다. NULL 값이 참여 할 수 있으며, 결과는 NULL을지지 않습니다 경우, 사용 CONCAT_WS는 () 값 (나중에 포스트 그레스 9.1)의 수를 연결하는 :

    SELECT concat_ws(', ', a, b) AS ab FROM foo;
    

    또는 CONCAT ()는 분리가 필요하지 않은 경우 :

    SELECT concat(a, b) AS ab FROM foo;
    

    두 기능은 텍스트 표현과 함께 "모든"입력 작업을하기 때문에 유형에 대한 필요가 여기에 캐스트하지 않습니다.

    자세한 내용 (및 유착이 가난한 대체 왜)이 관련 대답이 :

    +는 문자열 포스트 그레스에 연결 (또는 표준 SQL)에 대한 유효한 오퍼레이터 아니다. 그것은 그들의 제품이 추가 마이크로 소프트의 개인 생각입니다.

    사용 문자에 어떤 좋은 이유가 거의 없다 (N) (동의어 : CHAR (N)). 텍스트 또는 VARCHAR를 사용합니다. 세부:

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

    2.문제는 값에 널 (null)에 있었다; 다음 연결은 널 (null) 작동하지 않습니다. 다음과 같이 솔루션입니다 :

    문제는 값에 널 (null)에 있었다; 다음 연결은 널 (null) 작동하지 않습니다. 다음과 같이 솔루션입니다 :

    SELECT coalesce(a, '') || coalesce(b, '') FROM foo;
    
  3. ==============================

    3.연결에 대한 PostgreSQL의에서 CONCAT 함수를 사용하는 것이 더 좋습니다

    연결에 대한 PostgreSQL의에서 CONCAT 함수를 사용하는 것이 더 좋습니다

    예 : 사람으로부터 선택 CONCAT (FIRST_NAME, LAST_NAME) 여기서 PID = 136

    당신이 column_a를 사용하는 경우 || ''|| 2 열의 연결 용 column_b는 column_a 또는 column_b의 값 중 하나가 null 검색어에 널 값을 반환한다. 이는이 너무 대신 .. 모든 경우에서 바람직 할 수 없다

    사용하다

    그 중 하나가 값이있는 경우는 해당 값을 반환합니다

  4. ==============================

    4.CONCAT 함수는 가끔 오래된 PostgreSQL의 버전에서 작동하지

    CONCAT 함수는 가끔 오래된 PostgreSQL의 버전에서 작동하지

    내가 CONCAT를 사용하지 않고 문제를 해결하기 위해 무엇을 사용 참조

     u.first_name || ' ' || u.last_name as user,
    

    또는 또한 사용할 수 있습니다

     "first_name" || ' ' || "last_name" as user,
    

    두 번째 경우에 나는 FIRST_NAME과 LAST_NAME을위한 따옴표를 사용

    이것이 도움이 될 것입니다 덕분에 희망

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

    5.나는이에 갇혀 있었다, 나는 나를 위해 최선을 다했다 솔루션을 공유한다고 생각합니다. 나는이 훨씬 간단하다고 생각합니다.

    나는이에 갇혀 있었다, 나는 나를 위해 최선을 다했다 솔루션을 공유한다고 생각합니다. 나는이 훨씬 간단하다고 생각합니다.

    당신은 대문자로 테이블 이름을 사용하는 경우.

    SELECT CONCAT("firstName", ' ', "lastName") FROM "User"
    

    당신은 소문자 테이블 이름을 사용하는 경우

    SELECT CONCAT(firstName, ' ', lastName) FROM user
    

    그것 뿐이다! PGSQL 열 선언 및 문자열에 작은 따옴표를, 마치 마법처럼이 작품에 대한 큰 따옴표를 계산한다.

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

    6.PHP의 Laravel 프레임 워크, 내가 검색 FIRST_NAME을 사용하고, LAST_NAME 필드 전체 이름 검색과 같은 고려

    PHP의 Laravel 프레임 워크, 내가 검색 FIRST_NAME을 사용하고, LAST_NAME 필드 전체 이름 검색과 같은 고려

    $names = str_replace(" ", "", $searchKey);                               
    $customers = Customer::where('organization_id',$this->user->organization_id)
                 ->where(function ($q) use ($searchKey, $names) {
                     $q->orWhere('phone_number', 'ilike', "%{$searchKey}%"); 
                     $q->orWhere('email', 'ilike', "%{$searchKey}%");
                     $q->orWhereRaw('(first_name || last_name) LIKE ? ', '%' . $names. '%');
        })->orderBy('created_at','desc')->paginate(20);
    

    이 일의 매력!

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

    7.이 시도

    이 시도

    select textcat(textcat(FirstName,' '),LastName) AS Name from person;
    
  8. ==============================

    8.예를 들어 같은 컬럼으로 구성되어 직원 테이블이있는 경우 :

    예를 들어 같은 컬럼으로 구성되어 직원 테이블이있는 경우 :

    employee_number,f_name,l_name,email_id,phone_number 
    

    우리는 이름으로 합칠 수 f_name + l_name하십시오.

    SELECT employee_number,f_name ::TEXT ||','|| l_name::TEXT  AS "NAME",email_id,phone_number,designation FROM EMPLOYEE;
    
  9. from https://stackoverflow.com/questions/19942824/how-to-concatenate-columns-in-a-postgres-select by cc-by-sa and MIT license