복붙노트

[SQL] 뷰에서 - 과학 표기법 (> 숫자 VARCHAR에서) 캐스팅

SQL

뷰에서 - 과학 표기법 (> 숫자 VARCHAR에서) 캐스팅

, 820.0E-12 + 00 10.0E을 : 이유로 나는 다음과 같은 데이터가 포함 된 VARCHAR 열이 도움이되지 수 있습니다.

나는 숫자 값을합니다. 나는 작동이 테스트 쿼리가 그래서 :

declare @d varchar(256)
set @d = '820.0E-12'
select 
   CASE 
      WHEN @d like '%E-%' THEN LTRIM(RTRIM(CAST(CAST(@d AS FLOAT) AS DECIMAL(18,18))))
      WHEN @d like '%E+%' THEN NULL
      ELSE @d
   END

내 결과는 다음과 같습니다 0.000000000820000000를 (내가 원하는입니다)

이 같은 숫자> 0 (+ 00 10.0E)에 대한 계정에 내 SQL을 변경 :

WHEN @d like '%E+%' THEN CAST(@d AS FLOAT)

(내가 원하는하지 무엇 인) 8.2E-10 : 내 결과로 변경

만약 변화 @ D = '10 .0E + 00 다음 I 얻을 10 (정확하다).

내가 주조 과학적 표기법을 포함하는 VARCHAR 열, 출력을 할 필요가 있음을 볼 수있어 / 소수 (18, 18)로 변환.

누군가가 여기서 뭐 막무가내 일이야 말해 줄래?

또는, 어쩌면 내 질문해야한다, 내가 캐스트 어떻게 / 뷰에서 소수점 출력에 VARCHAR 과학적 표기법 열을 변환?

문 번호를 작동 <0하지만 나는 또한 번호를 계정에 필요> 내가 언제 두 번째를 변경하려면 CAST, 그것은 휴식을 포함하면 0 언제 내 첫 번째는 / 잘못된 결과를 제공합니다.

해결법

  1. ==============================

    1.모두 같은 시간에 함께 여기에오고 몇 가지 문제가있다. 그들 중 일부에서 살펴 보자 :

    모두 같은 시간에 함께 여기에오고 몇 가지 문제가있다. 그들 중 일부에서 살펴 보자 :

    여기에 완전히 모든 것을 해결해야하는 솔루션이다 :

    SELECT
        LTRIM(RTRIM(CASE 
            WHEN @d like '%E-%' THEN CAST(CAST(@d AS FLOAT) AS DECIMAL(18,18))
            WHEN @d like '%E+%' THEN CAST(CAST(@d AS FLOAT) AS DECIMAL)
            ELSE @d
        END))
    
  2. ==============================

    2.당신은 ISO "진짜"데이터 유형을 사용할 수 있습니다

    당신은 ISO "진짜"데이터 유형을 사용할 수 있습니다

    
    SELECT convert(numeric(18,18),convert(real,'820.0E-12'))
    --OR with more precision
    SELECT convert(numeric(18,18),convert(float(53),'820.0E-12'))
    
  3. ==============================

    3.

    mysql> select '820.0E-12' + 0, '10.0E+00' + 0;
    +-----------------+----------------+
    | '820.0E-12' + 0 | '10.0E+00' + 0 |
    +-----------------+----------------+
    |   0.00000000082 |             10 |
    +-----------------+----------------+
    

    단순히 VARCHAR에 0을 추가하는 것은 당신에게 숫자 값을 제공해야한다고. (OK, 먼저 TRIM이 필요할 수 있습니다.)

    본질적으로 적절한 용도는 M 또는 N FLOAT의 경우 (m, N)이있다; 간단하게 (약 16) 물건 (최대 7에 대한 유효 숫자에 대한) FLOAT 또는 DOUBLE을 선언합니다.

  4. from https://stackoverflow.com/questions/6750021/casting-scientific-notation-from-varchar-numeric-in-a-view by cc-by-sa and MIT license