TO_DOUBLE

TO_DOUBLE

TO_DOUBLE은 표현식을 배정밀도(double-precision) 부동소수점 숫자로 변환하는 함수예요. NULL 입력이면 결과도 NULL이에요.

출처: Snowflake SQL Reference

본문

카테고리: 변환 함수

구문 (Syntax)

TO_DOUBLE( <expr> [, '<format>' ] )

인자 (Arguments)

<expr> — 숫자, 문자, 또는 variant 타입의 표현식이에요.

<format> — 표현식이 문자열로 평가된다면, 선택적으로 형식 모델(format model)을 받을 수 있어요. 형식 모델에 대한 설명은 SQL 형식 모델에 있어요. 형식 모델은 출력 값의 형식이 아니라 입력 문자열의 형식을 지정해요.

반환값 (Returns)

이 함수는 FLOAT 데이터 타입의 값을 반환해요. expr이 NULL이면 NULL을 반환해요.

사용 시 유의사항 (Usage notes)

  • 고정 소수점 숫자는 부동소수점으로 변환돼요. 이 변환은 실패할 수 없지만 정밀도가 손실될 수 있어요.
  • 문자열은 십진 정수 또는 분수로 변환되며, 과학적 표기법과 특수 값(nan, inf, infinity)도 받아들여져요.
  • VARIANT 입력의 경우:
    • variant에 고정 소수점 값이 있으면 숫자 변환이 수행돼요.
    • variant에 부동소수점 값이 있으면 값은 그대로 유지돼요.
    • variant에 문자열이 있으면 문자열 변환이 수행돼요.
    • variant에 Boolean 값이 있으면 결과는 0 또는 1이 돼요(false와 true에 각각 대응).
    • variant에 JSON null 값이 있으면 출력은 NULL이 돼요.
  • 십진 분수를 이진 부동소수점으로 변환하고 다시 되돌리는 것은 정확하지 않아요. (즉, 십진 표현에서 변환된 부동소수점 숫자를 출력하면 약간 다른 숫자가 나올 수 있어요.) 십진 분수의 정확한 표현이 필요하다면 고정 소수점 숫자를 사용해요.

예시 (Examples)

서로 다른 데이터 타입의 열을 가진 테이블을 만든 뒤, 이 스크립트는 그 열들 각각에 TO_DOUBLE을 호출해요:

CREATE OR REPLACE TABLE double_demo (d DECIMAL(7, 2), v VARCHAR, o VARIANT);
INSERT INTO double_demo (d, v, o) SELECT 1.1, '2.2', TO_VARIANT(3.14);
SELECT TO_DOUBLE(d), TO_DOUBLE(v), TO_DOUBLE(o) FROM double_demo;
+--------------+--------------+--------------+
| TO_DOUBLE(D) | TO_DOUBLE(V) | TO_DOUBLE(O) |
|--------------+--------------+--------------|
|          1.1 |          2.2 |         3.14 |
+--------------+--------------+--------------+

다음 예시는 이진 부동소수점에서 숫자로 다시 변환하는 것이 정확하지 않다는 것을 보여줘요:

SELECT TO_DOUBLE(1.1)::NUMBER(38, 18);
+--------------------------------+
| TO_DOUBLE(1.1)::NUMBER(38, 18) |
|--------------------------------|
|           1.100000000000000089 |
+--------------------------------+

더 알아보기