programing

Postgres SELECT에서 열을 연결하는 방법은 무엇입니까?

telebox 2023. 5. 2. 22:34
반응형

Postgres SELECT에서 열을 연결하는 방법은 무엇입니까?

나는 두 줄의 줄이 있습니다.a그리고.b표에.foo.

select a, b from foo반환 값a그리고.b단, 다음의 연결a그리고.b작동하지 않습니다.노력했습니다.

select a || b from foo

그리고.

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

주석에서 업데이트: 두 열이 모두 유형입니다.character(2).

다음과 같은 문자열 유형 을 사용character(2)(나중에 언급한 바와 같이) 표시된 연결은 설명서를 인용하면 다음과 같은 이유로 작동합니다.

[...] 문자열 연결 연산자(|| 9.8에 표시된 것처럼 적어도 하나의 입력이 문자열 유형인 경우에는 문자열이 아닌 입력을 허용합니다.다른 경우에는 다음과 같은 명시적인 강요를 삽입합니다.text[...]

굵은 글씨로 강조해주세요.두 번째 예(select a||', '||b from foo)는 입력되지 않은 문자열 리터럴 이후의 모든 데이터 유형에 대해 작동합니다.', 'type으로 기본 설정text어떤 경우에도 전체 표현을 유효하게 만드는 것.

문자열이 아닌 데이터 유형의 경우 다음에 하나 이상의 인수를 캐스팅하여 첫 번째 문을 "수정"할 수 있습니다.text(모든 유형을 캐스트할 수 있습니다.text):

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

당신의 대답으로 판단하건대, "작동하지 않음"은 "NULL을 반환함"을 의미해야 했습니다.NULL에 연결된 모든 결과는 NULL입니다. NULL 값이 포함될 수 있고 결과가 NULL이 아닐 경우 다음을 사용하여 임의의 수의 값을 연결합니다(Postgres 9.1 이상).

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

null이 아닌 값 사이, 즉 필요한 경우에만 구분 기호가 추가됩니다.

또는 구분 기호가 필요하지 않은 경우:

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

두 기능 모두 입력을 받고 텍스트 표현으로 작업하기 때문에 여기서 유형 캐스트가 필요하지 않습니다.

자세한 정보(및 이유)COALESCE다음과 같은 관련 답변에서 는 부실한 대체물입니다.

댓글 업데이트 관련

+Postgres(또는 표준 SQL)의 문자열 연결에 유효한 연산자가 아닙니다.Microsoft는 이를 자사 제품에 추가하는 것이 개인적인 생각입니다.

사용할 좋은 이유가 거의 없습니다. character(n) (계속: char(n) ) 또는 를 사용합니다. 세부사항:

값에 문제가 null로 표시되었습니다. 연결이 null로 작동하지 않습니다.솔루션은 다음과 같습니다.

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

Postgre에서 CONCAT 기능을 사용하는 것이 좋습니다.연결을 위한 SQL

: 예:select CONCAT(first_name,last_name) from person where pid = 136

2열 연결에 column_a || ' || column_b를 사용하는 경우, column_a 또는 column_b의 값 중 하나가 null 쿼리인 경우 null 값이 반환됩니다.모든 경우에 선호되지 않을 수 있습니다.그래서 이것 대신에

||

사용하다

CONCAT

둘 중 하나에 가치가 있을 경우 관련 가치를 반환합니다.

저도 여기에 갇혀 있었기 때문에 저에게 가장 잘 맞는 솔루션을 공유해야 한다고 생각합니다.저는 또한 이것이 훨씬 더 간단하다고 생각합니다.

대문자로 표시된 테이블 이름을 사용하는 경우.

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

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

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

바로 그거야!PGSQL은 열 선언을 위해 이중 따옴표를, 문자열을 위해 단일 따옴표를 계산하기 때문에 이것은 매력적으로 작동합니다.

CONCAT 기능이 이전 postgre에서 작동하지 않는 경우가 있습니다.SQL 버전

CONCAT를 사용하지 않고 문제를 해결하기 위해 사용한 내용 확인

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

또는 사용할 수 있습니다.

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

두 번째 경우에는 first_name과 last_name에 큰따옴표를 사용했습니다.

이것이 유용하기를 바랍니다, 감사합니다.

PHP의 라라벨 프레임워크, first_name, last_name 검색을 사용하고 있습니다. 전체 이름 검색처럼 필드를 고려합니다.

|| 기호 Or concat_ws(), concat() 메서드 사용

$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);

이것은 효과적인 매력!!!

사용해 보세요.

select concat_ws(' ', FirstName, LastName) AS Name from person;

예를 들어 다음과 같은 열로 구성된 직원 테이블이 있는 경우:

employee_number,f_name,l_name,email_id,phone_number 

우리가 연줄로 연결하고 싶다면,f_name + l_name~하듯이name.

SELECT employee_number,f_name ::TEXT ||','|| l_name::TEXT  AS "NAME",email_id,phone_number,designation FROM EMPLOYEE;

이 작업에 파이프를 사용할 수도 있습니다.

Select EmployeeID ,FirstName ||' ' || LastName as Full_Name from Employees
order by EmployeeID

언급URL : https://stackoverflow.com/questions/19942824/how-to-concatenate-columns-in-a-postgres-select

반응형