HOWTO · PostgreSQL
PostgreSQL에서 정수를 문자열로 변환
이 자습서에서는 PostgreSQL에서 정수를 문자열로 변환하는 방법에 대해 설명합니다.
이 페이지의 내용
PostgreSQL에서 정수를 문자열로 바꾸려면 CAST(value AS text) 또는 PostgreSQL의 value::text 구문으로 text 형식으로 변환하면 됩니다. 쿼리에서 텍스트 값이 필요할 때는 둘 중 하나를 사용하고, 텍스트와 다른 형식의 값을 결합하려면 CONCAT을 사용하세요. 아래 SQL 조각은 구문을 보여 주며, 실행 결과는 포함하지 않습니다.
CAST로 정수를 text로 변환하기
CAST는 표준 SQL 구문으로, 원본 형식과 대상 형식을 명시적으로 보여 줍니다. 예를 들어 SELECT CAST(123 AS text) AS string_value;는 123을 담은 text 형식의 값을 반환합니다. 쿼리에서 열이나 식을 텍스트로 사용해야 한다면 정수 리터럴을 CAST(order_id AS text)처럼 바꾸면 됩니다. PostgreSQL에서 문자 문자열 형식의 이름은 text입니다. 여기서 ‘문자열’은 표현하려는 값의 일반적인 명칭입니다.
PostgreSQL의 :: 형 변환 연산자 사용하기
PostgreSQL은 간결한 :: 형 변환 연산자도 지원합니다. SELECT 123::text AS string_value;는 CAST 형식과 동일하게 같은 정수를 같은 형식으로 변환합니다. 여러 사람이 함께 사용하는 SQL에서 명시적인 형식이 더 읽기 쉽다면 CAST를, 주변 PostgreSQL 쿼리에 자연스럽다면 연산자 형식을 선택하세요. 두 구문 모두 형식을 변환합니다. 구분 기호나 공백을 채우는 등 표시 형식을 지정하지는 않습니다.
WHERE 절에서 text 열과 정수 비교하기
quiz_score.score 열의 형식은 text이고 비교하려는 값은 정수라고 가정해 보겠습니다. score를 100과 바로 비교하면 텍스트와 정수 형식이 섞입니다. 두 피연산자의 형식을 호환되게 하려면 정수 쪽을 text로 변환하세요. 예를 들면 SELECT score FROM quiz_score WHERE score = CAST(100 AS text);입니다. PostgreSQL의 축약 구문은 WHERE score = 100::text입니다.
이 비교에서는 열을 텍스트로 취급합니다. 예를 들어 텍스트 값 100과 0100은 같은 숫자를 나타낼 수 있어도 서로 다른 값입니다. 숫자 비교가 목적이라면 열의 값이 유효한 정수일 때만 열을 변환하세요. 그렇지 않으면 변환이 실패할 수 있습니다. 이미 숫자 형식인 열은 text로 변환하지 말고 숫자 값과 비교하세요.
CONCAT으로 텍스트와 숫자 결합하기
CONCAT은 인수를 결합하고, 텍스트가 아닌 인수는 결합 결과를 만들 때 텍스트로 변환합니다. 예를 들어 SELECT CONCAT('The number is ', 123);은 The number is 123이라는 텍스트를 만듭니다. 레이블이나 메시지를 만들 때 유용하지만, 단독 형 변환을 표현하는 세 번째 구문은 아닙니다. 변환된 정수 자체가 쿼리에 필요하다면 CAST 또는 ::text를 사용하세요. PostgreSQL의 CONCAT은 NULL 인수를 무시합니다. 대체값을 넣으려면 value가 텍스트가 아닐 수 있을 때 COALESCE(value::text, 'fallback')을 사용하세요. 형 변환을 하면 COALESCE의 두 인수가 같은 형식이 됩니다.
자주 묻는 질문
CAST와 ::의 차이는 무엇인가요? CAST(value AS text)는 표준 SQL 구문이고, value::text는 PostgreSQL 전용 축약 구문입니다. 둘 다 값을 text 형식으로 변환합니다.
다른 값도 text로 변환할 수 있나요? PostgreSQL은 날짜와 불리언을 비롯한 여러 형식의 값을 변환할 수 있습니다. 결과 텍스트의 표현은 원본 형식과 해당 형식의 출력 방식에 따라 달라집니다.
WHERE 절에서 형 변환을 사용할 수 있나요? 네. text 열과 비교할 때 정수 매개변수나 식을 text로 변환하세요. 예를 들면 score = 100::text와 같습니다. 비교하는 값이 의도한 의미와 형식에 맞는지 확인하세요.