SQL 형식 모델

Snowflake에서 SQL 형식 모델(즉, 형식 문자열을 포함한 리터럴)은 숫자 값이 텍스트 문자열로 변환되거나 그 반대로 변환되는 방식을 지정하는 데 사용됩니다. 따라서 TO_CHAR , TO_VARCHARTO_DECIMAL , TO_NUMBER , TO_NUMERIC 변환 함수에서 이런 모델을 인자로 지정할 수 있습니다.

참고

Snowflake는 날짜, 시간, 타임스탬프에 대해 제한된 SQL 형식 모델 지원도 제공합니다(날짜 및 시간 함수변환 함수 참조). SQL 형식 모델을 사용해 날짜, 시간, 타임스탬프의 형식을 지정하기 위한 완전한 지원 기능은 향후 릴리스에 추가될 예정입니다.

이 항목의 내용:

형식 모델의 구성 요소

형식 모델은 형식 요소와 리터럴의 문자열로 구성됩니다.

형식 요소

형식 요소는 숫자 및/또는 문자(주로 대/소문자 구분 안 함)와 경우에 따라서는 기호로 이루어진 시퀀스입니다. 형식 요소는 서로 직접 연결할 수 있습니다.

일부 형식 요소는 입력 텍스트의 인쇄와 일치를 제어하기 위해 모든 형식 모델에 걸쳐 흔히 사용됩니다. 다른 형식 요소는 캐스팅하는 데 사용되는 값의 유형을 기준으로 특정한 용도가 있습니다. 자세한 내용은 이 항목의 다음 섹션을 참조하십시오.

형식 리터럴

형식 리터럴은 다음의 조합으로 구성될 수 있는 시퀀스입니다.

  • 큰따옴표로 구분된 임의의 문자로 구성된 문자열(큰따옴표는 두 개의 인접한 큰따옴표로 표시됨).

  • 다음 기호 중 하나 이상

    기호/문자

    참고

    . (마침표)

    고정 숫자 모델에서 0, 9 또는 X 다음에 올 때 형식 요소로 처리되며, 그렇지 않으면 그대로 보존됩니다.

    , (쉼표)

    숫자 모델에서 0, 9 또는 X 다음에 올 때 형식 요소로 처리되며, 그렇지 않으면 그대로 보존됩니다.

    ; (세미콜론)

    항상 그대로 보존됩니다.

    : (콜론)

    항상 그대로 보존됩니다.

    - (빼기 기호)

    항상 그대로 보존됩니다.

    = (등호)

    항상 그대로 보존됩니다.

    / (슬래시)

    항상 그대로 보존됩니다.

    ( (왼쪽 괄호)

    항상 그대로 보존됩니다.

    ) (오른쪽 괄호)

    항상 그대로 보존됩니다.

리터럴은 항상 형식 모델에서 현재의 위치대로 정확히, 있는 그대로 인쇄됩니다.

다음은 SQL 형식 모델을 사용해 숫자 앞이 아니라 뒤에 빼기 기호를 인쇄하는 간단한 예입니다. MI 는 숫자가 음수인 경우 빼기 기호를 넣을 곳을 나타냅니다.

select to_varchar(-123.45, '999.99MI') as EXAMPLE;
Copy

출력은 기본값 -123.45 가 아니라 123.45- 와 비슷한 모습일 것입니다.

이 항목의 끝에 더 많은 예가 나와 있습니다.

형식 한정자와 일반 공백 처리

다음 표에는 입력 텍스트의 인쇄와 일치를 제어하고 모든 형식 모델에 공통된 특수한 형식 요소가 나와 있습니다.

요소

설명

_ (밑줄)

아무것도 인쇄되지 않으며, 입력 시 공백은 선택 사항입니다.

FM

채우기 모드 한정자로, 모델에서 한정자 다음에 오는 모든 요소에 대해 압축 모드와 채우기 모드 간에 전환합니다.

FX

정확한 일치 한정자로, 모델에서 한정자 다음에 오는 모든 요소에 대해 느슨한 일치 모드와 정확한 일치 모드 간에 전환합니다.

참고

채우기 모드 한정자는 텍스트 최소 숫자 형식 요소(TM, TM9, TME)에 아무런 영향도 주지 않습니다.

채우기 모드 한정자를 사용해 출력 문자열 인쇄하기

기본적으로, 채우기 모드는 채우기 로 설정되고 FM 채우기 모드 한정자는 이를 압축 으로 전환하고, 반복해 사용하면 다시 채우기 로 전환하는 등의 방식으로 작동합니다.

대부분의 경우, 인쇄 시 채우기 모드를 사용하면 형식 요소가 왼쪽의 숫자는 선행 0 또는 공백으로 채우고 오른쪽의 텍스트는 공백으로 채워 고정 너비의 출력이 생성되도록 보장합니다. 이를 통해 고정 너비 글꼴의 열 형식 출력이 정렬되도록 보장합니다.

압축 모드에서는 대부분의 형식 요소가 최소 너비 출력만 생성합니다(즉, 선행 0과 공백 및 후행 공백은 표시되지 않음).

이러한 규칙을 준수하지 않는 형식 요소는 아래에서 명시적으로 언급합니다.

정확한 일치 한정자 FX 는 인쇄에 영향을 주지 않으며, 밑줄 형식 요소는 아무것도 인쇄하지 않습니다.

한정자를 사용해 입력 문자열 구문 분석하기

입력 문자열의 구문 분석은 채우기 모드 한정자 FM 과 완전한 일치 한정자 FX 의 영향을 모두 받습니다. 처음에는 다음과 같습니다.

  • 채우기 모드는 채우기 로 설정되고 FM 을 사용해 압축 모드로 전환했다가 다시 돌아올 수 있습니다.

  • 정확한 일치 모드는 느슨한 일치 모드로 설정되고 FX 를 사용해 정확한 일치 모드로 전환했다가 다시 돌아올 수 있습니다.

구문 분석 중 형식 요소와 리터럴에 대한 모든 문자열 일치는 대/소문자를 구분하지 않습니다.

느슨한 모드에서, 입력 구문 분석의 첫 단계는 선행 공백(공백, 탭, LF, CR, FF 및 VT 문자로 구성된 시퀀스)을 건너뛰는 것이며, 입력 시작 부분의 모드는 첫 번째 형식 요소가 FX 이면 엄격하고 그렇지 않으면 느슨합니다.

참고

내에서는 일반 공백 문자만 구문 분석할 수 있습니다(즉, 구성 요소는 탭 등으로 구분된 다른 줄에 있을 수 없음).

느슨한 일치 모드에서, 리터럴 내의 공백은 비어 있지 않은 공백 입력 시퀀스에 대해 일치 여부가 비교되며, 공백이 아닌 문자는 일대일로 일치 여부가 비교됩니다. 정확한 모드에서, 리터럴의 모든 문자는 입력 문자와 일대일로 일치해야 합니다.

숫자 형식 요소는 그에 대응하는 숫자 시퀀스와 일치 여부가 비교됩니다.

  • 채우기 모드와 정확한 모드가 모두 적용되는 경우 자릿수는 해당 숫자 형식 요소의 너비와 정확히 일치해야 합니다(선행 0이 있을 것으로 예상됨).

  • 압축 모드 또는 느슨한 모드가 적용되는 경우 일치하는 입력 숫자는 많아야 형식 요소의 최대 너비와 같은 자릿수를 가지는데, 최소한 한 자릿수 이상이어야 하고 선행 0은 무시됩니다.

텍스트 형식 요소는 대/소문자를 구분하지 않고 일치 여부가 비교됩니다.

  • 채우기 모드와 정확한 모드가 모두 적용되는 경우 후행 공백 수는 요소의 최대 너비까지 될 것으로 예상됩니다.

  • 그렇지 않으면, 느슨한 모드에서 가변 길이 텍스트 요소 뒤의 공백이 무시되고 정확한 모드에서 실제 단어(채우는 공백 제외)와 정확히 일치할 것입니다.

마지막으로, 현재 모드가 느슨한 모드인 경우 입력 문자열이 끝날 때까지는 후행 공백이 무시됩니다.

일반적으로, 느슨한 모드와 정확한 모드는 둘 다 형식 모델에 공백이 없거나 채우기 모드에서 형식 요소의 내용을 인쇄함으로써 공백이 생성될 수 없는 경우 일치하는 공백을 허용하지 않습니다.

참고

이 동작은 두 형식 요소 사이에 공백을 삽입할 수 있는 Oracle 느슨한 일치 의미 체계와 다른 점입니다. Snowflake는 더 엄격한 일치 의미 체계를 사용해 자동 데이터 타입 인식 중 지나치게 많은 거짓 일치가 발생하지 않도록 합니다.

느슨한 모드와 정확한 모드에 모두 있는 경우 공백을 무시해야 하는 곳은 _ (밑줄) 형식 요소를 사용해 명시적으로 표시할 수 있습니다.

경험상, 정확한 모드의 형식은 같은 형식으로 인쇄된 입력 문자열만 인식하는 반면, 느슨한 모드의 형식은 채우기 모드 한정자를 추가하거나 제거한 상태에서 유사한 형식으로 인쇄한 입력 문자열을 인식합니다.

숫자 형식 모델

숫자 형식 모델은 다음 두 가지 유형을 지원합니다.

  • 고정 위치(0, 9 또는 X 형식 요소가 있는 곳에 숫자를 명시적으로 배치)

  • 텍스트-최소(TM, TME, TM9 형식 요소)

참고

이 두 가지 유형은 같은 모델 내에서 혼합할 수 없습니다.

고정 위치 숫자 형식

참고

이 섹션에서는 음수가 아닌 고정 위치 숫자에 대해 설명합니다. 고정 위치 숫자 형식의 출력에서 숫자 기호의 위치 지정에 대한 자세한 내용은 고정 위치 형식의 기호 위치 를 참조하십시오.

고정 위치 숫자는 숫자 요소 0 또는 9 를 사용해 표시됩니다. 예를 들어, 999 는 10진수 자릿수가 1부터 3까지인 숫자를 나타냅니다. 숫자의 소수 부분은 구분 기호 요소, . (마침표) 또는 D 를 사용해 구분됩니다.

  • . 는 항상 마침표로 렌더링됩니다.

  • D 요소에 다른 문자를 사용하려면 모든 마침표를 쉼표로, 모든 쉼표를 마침표로 바꾸도록 입력 문자열을 수정한 후 캐스트 함수를 적용하십시오.

일반적으로 정수 부분의 선행 0과 소수 부분의 후행 0은 공백으로 대체됩니다(단, 정수 부분의 값이 0일 때는 단일 0 문자로 렌더링됨). 이 동작을 억제하려면 9 대신 0 형식 요소를 사용하십시오. 해당 위치에는 0 문자가 보존됩니다. 숫자 앞에 형식 요소 B 를 사용하면 정수 값의 마지막 0 이 유지되지 않습니다(즉, B 를 사용하고 숫자의 정수 부분 값이 0이면 모든 자릿수가 공백으로 렌더링됨).

숫자 그룹 구분 기호 , (쉼표) 또는 G 를 사용하면 자릿수가 그룹 구분 기호의 양쪽에 있을 만큼 숫자가 충분히 큰 경우 해당 그룹 구분 문자가 인쇄됩니다. 통화 합계를 인쇄하는 데 유용한 형식 모델의 예는 999,999.00 입니다.

형식의 자릿수 위치보다 숫자의 정수 부분에 더 많은 자릿수가 있을 때 모든 자릿수는 오버플로를 나타내기 위해 # 로 인쇄됩니다.

지수 요소는 고정 위치 숫자가 정규화되어 정수 부분의 첫 번째 자리가 1에서 9 사이의 숫자가 되도록 합니다(숫자의 값이 0이 아니어서 지수의 값도 0이 아닌 경우). EE 요소는 지수의 자릿수에서 오른쪽 숫자를 자동으로 선택하고, + 기호를 인쇄하지 않는 반면에 EEE, EEEE, EEEEE 는 지수와 요청한 수의 자릿수에 대해 + 또는 - 기호를 항상 인쇄합니다(선행 0이 표시되지 않음). 지수 오버플로는 자릿수 대신 # 로 표시됩니다.

지수 표시기는 형식 요소에서 첫 번째 문자의 대/소문자 여부에 따라 대문자 E 또는 소문자 e 를 인쇄합니다.

16진수 숫자 0-9A-F 가 인쇄된다는 점을 제외하면, X 형식 요소는 9 처럼 작동합니다. 현재, 16진수 분수는 지원되지 않습니다. 9 와 유사하게, X 는 선행 0을 공백으로 바꿉니다. X 와 함께 사용 시, 0 요소는 선행 0을 표시하지 않고 16진수를 인쇄합니다(따라서 000X 를 사용해 항상 4자리 숫자를 포함한 16진수를 인쇄함).

X 는 16진수를 대문자 라틴 문자로 인쇄하고, 소문자 x 는 소문자 라틴 문자를 인쇄합니다. 16진수 0 형식 요소는 그 뒤를 잇는 X 형식 요소의 대/소문자를 그대로 사용합니다.

일반적으로, 16진수는 부호 없는 숫자로 표시되지만(즉, 음수는 전부 최상위 비트에 1 이 있음), X 요소를 명시적 부호(S 또는 MI)와 함께 사용하면 - 부호가 해당 숫자의 절대값과 함께 인쇄됩니다.

고정 위치 숫자 형식 모델은 부동 소수점 숫자의 특수한 값(무한대 또는 숫자가 아닌 값)에 대한 오버플로를 보고합니다.

고정 위치 형식 요소

다음 표에는 고정 위치 형식용으로 지원되는 요소가 나와 있습니다. 다음 사항을 참고하십시오.

  • 반복 가능 열은 요소가 형식 모델에서 반복될 수 있는지 여부를 나타내며, 그렇지 않으면 요소는 형식 모델당 한 번만 사용할 수 있습니다.

  • 대/소문자 구분 열은 요소의 대/소문자 여부가 형식에 영향을 미치는 요소를 나타냅니다. 예:

    • EE 는 지수를 대문자 E 로 처리합니다.

    • ee 는 지수를 소문자 e 로 처리합니다.

    다른 모든 요소는 대/소문자를 구분하지 않습니다.

요소

반복 가능

대/소문자 구분

설명

$

숫자의 자릿수 앞(보통은 부호 뒤)에 인쇄된 달러 기호.

. (마침표)

소수 구분 기호로, 항상 마침표로 인쇄됩니다.

, (쉼표)

자릿수 그룹 구분 기호로, 쉼표 또는 공백으로 인쇄됩니다.

0

자릿수의 위치로, 선행/후행 0이 명시적으로 인쇄됩니다.

9

자릿수의 위치로, 선행/후행 0이 공백으로 바뀝니다.

B

0 값을 후속 숫자에서 공백으로 나타내도록 적용합니다.

D

소수 구분 기호로, . 요소 대신 사용됩니다(위의 설명 참조).

EE

정수에 대한 + 부호가 없는 2~5자의 가변 너비 지수(예: E0, E21, E200, E-200)입니다.

EEE

고정 너비 지수(3자)로, 범위는 E-9 에서 E+9 까지입니다.

EEEE

고정 너비 지수(4자)로, 범위는 E-99 에서 E+99 까지입니다.

EEEEE

고정 너비 지수(5자)로, 범위는 E-324 에서 E+308 까지입니다.

G

자릿수 그룹 구분 기호로, , 대신 사용됩니다(위의 설명 참조).

MI

명시적 숫자 기호 자리 표시자로, 양수를 나타내는 공백 또는 음수를 나타내는 - 부호를 인쇄합니다.

S

명시적 숫자 기호 자리 표시자로, 양수를 나타내는 + 부호 또는 음수를 나타내는 - 부호를 인쇄합니다.

X

16진수입니다.

고정 위치 형식의 기호 위치

기본적으로, 고정 위치 형식은 다음과 같이 항상 숫자의 부호를 위한 공간을 남겨둡니다.

  • 음수가 아닌 숫자의 경우, 기본 공백이 첫 번째 자릿수 앞에 인쇄됩니다.

  • 음수의 경우, 기본 공백과 - 부호가 첫 번째 자릿수(또는 B 형식 요소가 분수에 사용될 때는 소수점) 앞에 인쇄됩니다.

하지만 S, MI, $ 형식 요소를 사용해 숫자에 대한 부호 및/또는 공백이 있는 위치를 명시적으로 지정할 수 있습니다.

예를 들면 다음과 같습니다(아래 예에서는 공백을 삽입하는 위치를 나타내기 위해 밑줄 _ 을 사용함).

형식 모델

12 가 출력되는 방식:

-7 이 출력되는 방식:

99

_12

_-7

S99

+12

_-7

99S

12+

_7-

MI99

_12

-_7

99MI

12_

_7-

$99

_$12

_-$7

고정 위치 형식과 채우기 모드 한정자를 사용해 숫자 인쇄하기

채우기 모드에서 EEMI 와 같은 가변 길이 형식 요소는 오른쪽에 공백이 채워집니다.

압축 모드에서는 가변 길이 요소를 포함하여 숫자 형식 요소에서 발생하는 모든 공백이 제거되므로, 결과 문자열이 더 짧고 더 이상 정렬되지 않습니다. 예를 들면 다음과 같습니다(공백이 없다는 점에 주목할 것).

형식 모델

12 가 출력되는 방식:

-7 이 출력되는 방식:

FM99

12

-7

고정 위치 형식과 한정자를 사용해 숫자 구문 분석하기

숫자가 포함된 문자열 구문 분석은 FXFM 한정자의 영향을 모두 받습니다.

  • 느슨한 모드에서는 다음과 같습니다.

    • 자릿수 그룹 구분 기호는 선택 사항입니다(즉, 그룹 구분 기호가 있거나 없는 숫자는 일치하지만, 각 그룹 구분 기호 사이의 자릿수 개수가 일치해야 함). 또한, +MI 형식 요소에 유효한 일치로 허용합니다.

    • 느슨한 모드는 0 형식 요소와 일치하려면 자릿수(선행 0 또는 후행 0도 포함)가 있어야 한다는 요구 사항을 비활성화하지 않습니다.

    • 느슨한 모드에서는 선행 기호와 첫 번째 자릿수 사이에 공백이 허용됩니다.

    • 또한, 느슨한 모드에서는 모든 지수 형식 요소(EE, EEE, EEEE, EEEEE)는 EE 로 처리되며, 지수 사양을 1~3개의 자릿수와 선택적 + 또는 - 부호와 일치시킵니다.

    • 정수 부분에 숫자가 없는 일치하는 숫자를 허용하려면 B 를 사용하십시오. 느슨한 모드에서 빈 소수 부분 앞의 소수점은 선택 사항입니다.

  • 정확한 모드에서는 다음과 같습니다.

    • 숫자는 형식과 일치하도록 생략된 자릿수 대신 알맞은 수의 공백이 있어야 합니다(즉, 채우기 모드에서는 공백이고 압축 모드에서는 공백이 부족함).

    • 정확한 모드에서는 그룹 구분 기호를 생략할 수 없고, MI+ 부호와 일치하지 않습니다.

    • EE 이외의 지수 형식 요소는 부호 위치와 형식 요소에 필요한 정확한 자릿수와 일치해야 합니다.

    • 형식 모델에서 지정된 자리의 소수점은 필수입니다.

텍스트-최소 숫자 형식

고정 위치 숫자 형식 모델은 항상 자릿수를 명시적으로 지정하지만, 텍스트-최소 형식 요소는 숫자 값을 기준으로 최소 자릿수를 사용합니다. 채우기 모드 한정자(채우기 또는 압축)와 관계없이, TM* 형식 요소는 항상 공백 없이 가변 길이 출력을 생성합니다.

  • TM9 는 숫자 값을 기준으로 숫자를 정수 또는 소수로 인쇄합니다. 모든 10진수 고정 소수점 숫자 값은 숫자의 소수 자릿수로 결정되는 소수부의 자릿수로 정확하게 인쇄됩니다(후행 0은 채우기 모드에서 유지됨).

  • 부동 소수점 숫자의 경우, TM9 는 숫자의 지수를 기준으로 소수 자릿수를 선택합니다(정확한 이진수를 소수로 변환할 수 없음). 부동 소수점 숫자의 크기가 너무 커서 위치 표기법이 너무 길어지면 과학적 표기법으로 전환합니다(아래 TME 참조). 부동 소수점 숫자가 너무 작을 경우 TM9 는 0을 인쇄합니다.

  • TME 는 (EE 와 같은) 지수와 소수부의 정수 위치에 한 개의 자릿수를 사용하는 과학적 표기법으로 숫자를 인쇄합니다. 지수 표시(E 또는 e)의 대/소문자는 형식 요소의 첫 번째 문자(T 또는 t)의 대/소문자와 일치합니다.

  • TM 은 전체 자릿수를 유지하면서 텍스트 길이를 최소화하기 위해 숫자의 크기에 따라 TM9 또는 TME 중 하나를 선택합니다.

텍스트-최소 형식 요소

다음 표에는 텍스트-최소 형식용으로 지원되는 요소가 나와 있습니다. 다음 사항을 참고하십시오.

  • 텍스트-최소 형식 문자열 내에서 어떤 요소도 반복할 수 없습니다.

  • 대/소문자 구분 열은 요소의 대/소문자 여부가 형식에 영향을 미치는 요소를 나타냅니다. 예:

    • TME 는 지수를 대문자 E 로 처리합니다.

    • tme 는 지수를 소문자 e 로 처리합니다.

    다른 모든 요소는 대/소문자를 구분하지 않습니다.

요소

반복 가능

대/소문자 구분

설명

$

숫자의 자릿수 앞(보통은 부호 뒤)에 달러 기호가 삽입됩니다.

TM

텍스트-최소 숫자로, TM9 또는 TME 중 더 짧은 숫자입니다.

TM9

위치 표기법의 텍스트-최소 숫자입니다.

TME

과학적 표기법으로 표시된 텍스트-최소 숫자(지수 포함).

B

0 값을 후속 숫자에서 공백으로 나타내도록 적용합니다.

MI

명시적 숫자 기호 자리 표시자로, - 또는 공백 중 하나가 됩니다.

S

명시적 숫자 기호 자리 표시자로, - 또는 + 중 하나가 됩니다.

텍스트-최소 형식의 기호 위치

기본적으로, 텍스트-최소 형식의 기호는 다음 중 하나입니다.

  • 음수의 경우 숫자 앞에 추가되는 -.

  • 음수가 아닌 숫자의 경우 생략됩니다.

$, SMI 요소는 고정 위치 형식 모델과 똑같은 효과를 갖습니다. 부동 소수점 숫자에는 각각 극소의 양수 값과 음수 값을 나타내는 두 개의 고유한 0 값(+0.-0.)이 있습니다.

텍스트-최소 형식과 한정자를 사용해 숫자 구문 분석하기

텍스트-최소 형식 모델을 사용한 구문 분석은 FX 또는 FM 한정자의 영향을 받지 않지만, 명시적 부호 요소인 SMI 는 위에 설명한 것처럼 영향을 받습니다.

TM9 는 위치 표기법의 모든 10진수(정수 또는 분수)와 일치하며, 과학적 표기법의 숫자(즉, 지수가 있는 숫자)와는 일치하지 않습니다. 반대로 다음과 같습니다.

  • TME 는 과학적 표기법과만 일치합니다.

  • TM 은 둘 다와 일치합니다.

텍스트-최소 요소를 기준으로 일치하는 숫자는 그 안에 공백이나 자릿수 그룹 구분 기호를 포함할 수 없습니다.

지수 요소와 16진수 내의 문자는 대/소문자 여부와 관계없이 항상 일치합니다.

대체, 자동 및 기본 형식

요소

설명

| (파이프)

대체 형식을 구분합니다.

AUTO

자동 형식입니다.

문자열을 구문 분석할 때 형식 문자열을 | 문자로 구분하여 여러 대체 형식을 지정할 수 있습니다. 문자열이 하나의 형식과 일치하면 성공적으로 구문 분석됩니다. 입력 문자열이 여러 형식과 일치하는 경우 변환에는 어떤 형식이든 사용됩니다.

구문 분석에 사용되는 전체 형식은 키워드 AUTO 로 바꿀 수 있습니다. 그러면 원본 또는 결과 값의 유형에 따라 하나 이상의 대체 자동 형식이 삽입됩니다. 대안 중 하나로 AUTO 를 사용해 자동 형식에 사용자 지정 형식을 추가할 수 있습니다.

(CSV 파일에 있는) 입력값의 구문 분석과 결과 인쇄를 위해, 형식이 캐스트 함수에 명시적으로 지정되지 않은 경우에 기본 형식이 사용됩니다.

인쇄를 위한 기본 형식

다음 표에 인쇄를 위한 기본 형식이 나와 있습니다.

SQL 데이터 타입

매개 변수

기본 형식

DECIMAL

없음

TM9

DOUBLE

없음

TME

구문 분석을 위한 기본 형식

다음 표에 구문 분석을 위한 기본 형식이 나와 있습니다.

SQL 데이터 타입

매개 변수

기본 AUTO 형식

DECIMAL

없음

TM9

DOUBLE

없음

TME

자동 낙관적 문자열(즉, 자동으로 숫자로 인식되는 문자열의 경우) 변환에 사용되는 형식의 목록은 위의 기본 입력 형식 표에 있는 모든 형식의 합집합입니다.

출력 예

다음은 선행 0이 있는 숫자를 표시하는 방법을 보여주는 예입니다.

create table sample_numbers (f float);
insert into sample_numbers (f) values (1.2);
insert into sample_numbers (f) values (123.456);
insert into sample_numbers (f) values (1234.56);
insert into sample_numbers (f) values (-123456.789);
select to_varchar(f, '999,999.999'), to_varchar(f, 'S000,000.000') from sample_numbers;
Copy

출력은 다음과 유사할 것입니다.

+------------------------------+-------------------------------+
| TO_VARCHAR(F, '999,999.999') | TO_VARCHAR(F, 'S000,000.000') |
+==============================+===============================+
|        1.2                   | +000,001.200                  |
+------------------------------+-------------------------------+
|      123.456                 | +000,123.456                  |
+------------------------------+-------------------------------+
|    1,234.56                  | +001,234.560                  |
+------------------------------+-------------------------------+
| -123,456.789                 | -123,456.789                  |
+------------------------------+-------------------------------+
Copy

숫자를 정렬하기 위해 선행 0이 필요하지 않습니다. 기본 채우기 모드는 《채우기》인데, 이는 소수점의 위치를 기준으로 숫자를 정렬하는 데 선행 공백이 사용된다는 뜻입니다.

select to_varchar(f, '999,999.999'), to_varchar(f, 'S999,999.999') from sample_numbers;
Copy

출력은 다음과 유사할 것입니다.

+------------------------------+-------------------------------+
| TO_VARCHAR(F, '999,999.999') | TO_VARCHAR(F, 'S999,999.999') |
+==============================+===============================+
|        1.2                   |       +1.2                    |
+------------------------------+-------------------------------+
|      123.456                 |     +123.456                  |
+------------------------------+-------------------------------+
|    1,234.56                  |   +1,234.56                   |
+------------------------------+-------------------------------+
| -123,456.789                 | -123,456.789                  |
+------------------------------+-------------------------------+
Copy

다음은 FM(채우기 모드) 한정자를 사용해 《채우기》 모드에서 《압축》 모드로 전환하는 경우(즉, 숫자를 정렬하는 선행 문자를 제거하는 경우) 어떻게 되는지 보여주는 예입니다.

select  to_varchar(f, '999,999.999'), to_varchar(f, 'FM999,999.999') from sample_numbers;
Copy

출력은 다음과 유사할 것입니다.

+------------------------------+--------------------------------+
| TO_VARCHAR(F, '999,999.999') | TO_VARCHAR(F, 'FM999,999.999') |
+==============================+================================+
|        1.2                   | 1.2                            |
+------------------------------+--------------------------------+
|      123.456                 | 123.456                        |
+------------------------------+--------------------------------+
|    1,234.56                  | 1,234.56                       |
+------------------------------+--------------------------------+
| -123,456.789                 | -123,456.789                   |
+------------------------------+--------------------------------+
Copy

다음은 숫자를 지수 표기법으로 표시하는 방법을 보여주는 예입니다.

select to_char(1234, '9d999EE'), 'will look like', '1.234E3';
Copy

출력은 다음과 유사할 것입니다.

+--------------------------+------------------+-----------+
| TO_CHAR(1234, '9D999EE') | 'WILL LOOK LIKE' | '1.234E3' |
+==========================+==================+===========+
| 1.234E3                  |  will look like  |  1.234E3  |
+--------------------------+------------------+-----------+
Copy

다음은 출력에 리터럴을 포함하는 방법을 보여줍니다. 리터럴 부분은 큰따옴표로 묶여 있습니다(이것은 다시 문자열을 구분하는 작은따옴표로 묶임).

select to_char(12, '">"99"<"');
Copy

출력은 다음과 유사할 것입니다.

+-------+
| > 12< |
+-------+
Copy

입력 예

아래의 예에서는 입력에 형식 모델을 사용하는 것을 보여줍니다.

다음은 숫자 형식을 지정하기 위해 《0》과 《9》를 사용할 때의 차이점을 보여주는 데 중점을 두고서 몇 가지 간단한 입력 작업을 보여주는 예입니다.

숫자 《9》는 포맷터로서 공백이나 《누락된》 선행 자릿수를 허용합니다. 숫자 《0》은 포맷터로서 공백이나 누락된 선행 0을 허용하지 않습니다.

-- All of the following convert the input to the number 12,345.67.
SELECT TO_NUMBER('012,345.67', '999,999.99', 8, 2);
SELECT TO_NUMBER('12,345.67', '999,999.99', 8, 2);
SELECT TO_NUMBER(' 12,345.67', '999,999.99', 8, 2);
-- The first of the following works, but the others will not convert.
-- (They are not supposed to convert, so "failure" is correct.)
SELECT TO_NUMBER('012,345.67', '000,000.00', 8, 2);
SELECT TO_NUMBER('12,345.67', '000,000.00', 8, 2);
SELECT TO_NUMBER(' 12,345.67', '000,000.00', 8, 2);
Copy

다음은 두 가지 숫자 형식(-### 또는 ###-) 중 하나를 허용하는 방법을 보여줍니다.

-- Create the table and insert data.
create table format1 (v varchar, i integer);
insert into format1 (v) values ('-101');
insert into format1 (v) values ('102-');
insert into format1 (v) values ('103');

-- Try to convert varchar to integer without a
-- format model.  This fails (as expected)
-- with a message similar to:
--    "Numeric value '102-' is not recognized"
update format1 set i = TO_NUMBER(v);

-- Now try again with a format specifier that allows the minus sign
-- to be at either the beginning or the end of the number.
-- Note the use of the vertical bar ("|") to indicate that
-- either format is acceptable.
update format1 set i = TO_NUMBER(v, 'MI999|999MI');
select i from format1;
Copy