All thing of the world!

Postgresql format 설명 : 포스트그레스큐엘 함수 본문

IT/Postgresql DBMS

Postgresql format 설명 : 포스트그레스큐엘 함수

WorldSeeker 2021. 4. 11. 13:10

1. 함수의 목적

    Postgresql format 함수는 C의 sprint함수의 기능과 유사한 기능을 한다. 변수에 텍스트를 할당하면 그에 맞는 포맷으로 출력된다. 실제 업무에서는 다이나믹 sql 작성시 유용하게 사용가능하다. (문서 최하단 샘플 참조)

 

2. 샘플을 통한 개념 퀵뷰

 

    SELECT format('Hello %s', 'World');

 

    Result:

    Hello World

 

3. 사용방법

 

    format(formatstr text [, formatarg "any" [, ...] ])

    

4. 함수 PARAMETER 설명

 

[formatstr text]

formatstr은 결과의 형식을 지정하는 형식 문자열이다. 

fotmatstr은 %[position][flags][width]type형식으로 지정되며, 각 형식의 상세 설명은 아래와 같다.

 

position (선택)

숫자형식으로 표현하며 가져올 인수의 인덱스이다. 인덱스 1로 지정한다면, formatstr 다음의 첫 번째 인수를 의미한다. 위치가 생략된 경우 formatarg에 지정된 순서대로 할당된다. 

 

flags (선택)

숫자에 -를 붙일 경우 왼쪽 정렬이고, 아무것도 붙이지 않을 경우 오른쪽으로 정렬된다.

 

width (선택)

출력할 공간(넓이)를 지정한다.

 

type (필수)

출력형식 변환 유형을 지정한다.

  • s 스트링 포맷으로 지정, null은 빈 문자열로 취급
  • I 인수 값을 sql 식별자로 취급, null이면 오류
  • L 인수 값을 sql 리터럴로 취급, null은 'NULL'로 변환 출력

[formatarg "any"]

formatarg 인수는 fotmatstr에 할당되어 변환될 문자열의 인수이며, ','로 구분하여 공급한다.

 

 

5. 다양한 샘플 표현

 

1) 기본적인 포맷

 

SELECT format('Testing %s, %s, %s, %%', 'one', 'two', 'three');

Result: Testing one, two, three

 

SELECT format('INSERT INTO %I VALUES(%L)', 'Foo bar', E'O\'Reilly');

Result: INSERT INTO "Foo bar" VALUES('O''Reilly')

 

SELECT format('INSERT INTO %I VALUES(%L)', 'locations', 'C:\Program Files');

Result: INSERT INTO locations VALUES('C:\Program Files')

 

 

2) width  - flag를 지정한 샘플

 

SELECT format('|%10s|', 'foo');

Result: |       foo|

 

SELECT format('|%-10s|', 'foo');

Result: |foo       |

 

SELECT format('|%*s|', 10, 'foo');

Result: |       foo|

 

SELECT format('|%*s|', -10, 'foo');

Result: |foo       |

 

SELECT format('|%-*s|', 10, 'foo');

Result: |foo       |

 

SELECT format('|%-*s|', -10, 'foo');

Result: |foo       |

 

3) position을 지정한 샘플

 

SELECT format('Testing %3$s, %2$s, %1$s', 'one', 'two', 'three');

Result: Testing three, two, one

 

SELECT format('|%*2$s|', 'foo', 10, 'bar');

Result: |       bar|

 

SELECT format('|%1$*2$s|', 'foo', 10, 'bar');

Result: |       foo|

 

4) %I나 %L  type을 사용하여 안전한 다이나믹 sql을 구성한 샘플

 

EXECUTE format('UPDATE tbl SET %I = %L WHERE key = %L', colname, newvalue, keyvalue);

 

EXECUTE format('UPDATE tbl SET %I = $1 WHERE key = $2', colname) USING newvalue, keyvalue;

 

 

Comments