나는 두 개의 문자열 열이 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
)는 형식이 지정되지 않은 문자열 리터럴이 기본적으로 모든 경우에 전체 식을 유효하게 만드는 형식이므로 모든 데이터 형식에 적용됩니다.', '
text
문자열이 아닌 데이터 형식의 경우 하나 이상의 인수를 로 캐스팅 하여 첫 번째 문을 “수정”할 수 있습니다 text
. ( 모든 유형은로 캐스팅 가능 text
) :
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;
두 함수 모두 "any"
입력을 받고 텍스트 표현으로 작업하기 때문에 타입 캐스트가 필요하지 않습니다 .
COALESCE
이 관련 답변에 대한 자세한 내용 (그리고 왜 대체가 좋지 않은지 ) :
코멘트의 갱신에 대해
+
Postgres (또는 표준 SQL)에서 문자열 연결에 유효한 연산자가 아닙니다. 이를 제품에 추가하는 것은 Microsoft의 사적인 아이디어입니다.
사용해야 할 이유가 거의 없습니다 (동의어 🙂 character(n)
. char(n)
text
또는을varchar
사용하십시오 . 세부:
답변
문제는 값에서 널 (NULL)로 설정되었습니다. 연결은 널과 함께 작동하지 않습니다. 해결책은 다음과 같습니다.
SELECT coalesce(a, '') || coalesce(b, '') FROM foo;
답변
연결을 위해 PostgreSQL에서 CONCAT 함수를 사용하는 것이 좋습니다
예 : select CONCAT(first_name,last_name) from person where pid = 136
column_a를 사용하는 경우 || ”|| column_a 또는 column_b의 값 중 하나가 null이면 query는 null 값을 반환합니다. 모든 경우에 바람직하지 않을 수도 있습니다.
||
사용하다
CONCAT
둘 중 하나라도 가치가 있으면 관련 가치를 돌려줍니다
답변
CONCAT 함수는 때때로 이전 postgreSQL 버전에서 작동하지 않습니다
CONCAT를 사용하지 않고 문제를 해결하는 데 사용한 것을 확인하십시오.
u.first_name || ' ' || u.last_name as user,
또는 당신은 사용할 수 있습니다
"first_name" || ' ' || "last_name" as user,
두 번째 경우에는 first_name 및 last_name에 큰 따옴표를 사용했습니다.
도움이 되길 바랍니다. 감사합니다.
답변
나는 또한 이것에 갇혀 있었으므로 나에게 가장 적합한 솔루션을 공유해야한다고 생각합니다. 또한 이것이 훨씬 간단하다고 생각합니다.
대문자 테이블 이름을 사용하는 경우
SELECT CONCAT("firstName", ' ', "lastName") FROM "User"
소문자 테이블 이름을 사용하는 경우
SELECT CONCAT(firstName, ' ', lastName) FROM user
그게 다야!. PGSQL은 열 선언에 대해 Double Quote와 문자열에 대해 Single Quote를 계산하므로 매력처럼 작동합니다.
답변
PHP의 라 라벨 프레임 워크,
검색 first_name을 사용하고 있으며 last_name 필드는 전체 이름 검색과 같습니다.
|| 사용 기호 또는 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 textcat(textcat(FirstName,' '),LastName) AS Name from person;