테이블 타입 정의를 위해 DB(AZURE SQL, MSSQL, AZURE SYNAPSE SQL) 데이터 TYPE정의 중
원천 데이터의 정보만을 가지고 정수부+소수부 길이를 추출하여, 테이블 정의를 해야되는 일이 생겼다. (파일형태)

그러나 MS-SQL쪽 DB에서 사용하기 편한 추출함수 or 인터넷 자료에서도 최적의 구문은 확인 되지 않았고, 
있더라도 일부 소수/정수부 길이가 잘못 도출되는 구문이 대부분 이었다. 

이에 따라 아래와 같이 최적의 길이를 도출해낼 수 있는 구문을 만들어 보았다. 
SELECT /*정수부MAX값+소수부MAX값=전체MAX값*/
       /*정수부MAX값*/ CASE WHEN MAX(CHARINDEX ('.',123.12345 )) = 0 THEN MAX(LEN(123.12345))
                            ELSE  MAX(CHARINDEX ('.',123.12345))-1 END    
         + /*소수부MAX값*/ MAX(LEN (SUBSTRING(CAST(FORMAT (123.12345, '0.####################') AS VARCHAR)
                                             ,CHARINDEX ('.',123.12345 ) + 1,
                         CASE WHEN CHARINDEX ('.', 123.12345) = 0 THEN 0
                              ELSE LEN (123.12345) END)))                AS 전체MAX값
     , /*정수부MAX값*/ CASE WHEN MAX(CHARINDEX ('.',123.12345 )) = 0 THEN MAX(LEN(123.12345))
                            ELSE  MAX(CHARINDEX ('.',123.12345))-1 END   AS 정수부MAX값
     , /*소수부MAX값*/ MAX(LEN (SUBSTRING(CAST(FORMAT (123.12345, '0.####################') AS VARCHAR)
                                         ,CHARINDEX ('.',123.12345 ) + 1,
                       CASE WHEN CHARINDEX ('.', 123.12345) = 0 THEN 0
                            ELSE LEN (123.12345) END)))                  AS 소수부MAX값

( ※123.12345 <- 컬럼명으로 치환 후 추가 사용필요 )

'DATA Log' 카테고리의 다른 글

SAS 변수 메타정보 DATABASE 변환을 위한정보  (0) 2022.12.29
SQL 쿼리 시각화 분석  (0) 2022.12.22
10의 승 명칭 확인  (0) 2022.09.07

SAS -> DW 구축(Azure Synapse SQL Pool) 프로젝트 진행간 TABLE을 정의하며 있었던 내용에 대해 정리를 해본다.

SAS는 메타정보가 존재하며, 이를 이용하여 일반 DB의 테이블 LayOut을 지정하는데 사용 할 수 있다.

 

이때 전달받은 메타정보에서 유념해야 될 부분은 TYPE(변수유형) 인데 이 부분이 아래표에도 표시는 해놨지만,

문자형,숫자형이라고 데이터 자체가 문자,숫자만 들어오는건 아니다. (날짜등 다양한 타입정보 존재...)

 

FORMAT(변수의 출력형식) 에 따라 컬럼 타입은 얼마든지 변할 수 있다. 이 정보를 유념하여 컬럼 타입을 설정해야 한다.

포맷(변경전) 포맷(변환후) 비고
IS8601DA DATE $ - 문자형으로 처리
BEST -
문자형으로 처리

*TYPE = '1'
DECIMAL(30,10)

*TYPE = '2'
NVARCHAR(LENGTH)

FORMAT정보가 존재 할 시 FORMATL, FORMATD정보 기반으로
  길이 설정
   -> FORMATL, FORMATD는 필수설정 항목 아님. 
        정확한 길이 설정을 위해서는 원천 SAS에서 FORMATL,D 설정필수!
E8601DA DATE
YYMMDD DATE
E8601DT DATETIME
TIME TIME
IS8601DT DATETIME
   

 

[ EXAMPLE_META 포함된 메타 정보 항목 ]

OBS NAME LABEL
1 CHARSET 호스트 문자 집합
2 COLLATE 순서 맞추기
3 COMPRESS 압축 루틴
4 CRDATE 생성일
5 DELOBS 데이터셋에서 삭제된 관측값
6 ENCRYPT 암호 루틴
7 ENGINE 엔진
8 FLAGS 플래그 업데이트(보호 기여 추가)
9 FORMAT 변수의 출력형식
10 FORMATD 출력형식의 소수점 이하 자릿수
11 FORMATL 출력형식 길이
12 GENMAX 최대 생성 개수
13 GENNEXT 다음 생성 번호
14 GENNUM 생성 번호
15 IDXCOUNT 데이터셋에 대한 인덱스 개수
16 IDXUSAGE 인덱스에서 변수 사용
17 INFORMAT 변수의 입력형식
18 INFORMD 입력형식의 소수점 이하 자릿수
19 INFORML 입력형식 길이
20 JUST 정렬
21 LABEL 변수 레이블
22 LENGTH 변수 길이
23 LIBNAME 라이브러리 이름
24 MEMLABEL 데이터셋 레이블
25 MEMNAME 라이브러리 멤버 이름
26 MEMTYPE 라이브러리 멤버 유형
27 MODATE 마지막 수정일
28 NAME 변수 이름
29 NOBS 데이터셋의 관측값
30 NODUPKEY 정렬 옵션: 중복 키 없음
31 NODUPREC 정렬 옵션: 중복 레코드 없음
32 NPOS 버퍼 위치
33 POINTOBS 관측값 지점
34 PROTECT 암호 보호(읽기 쓰기 변경)
35 REUSE 공백 재사용
36 SORTED 정렬됨 및/또는 검증됨
37 SORTEDBY Sortedby 절의 변수 위치
38 TRANSCOD 전치된 문자 변수
39 TYPE 변수 유형
40 TYPEMEM 특수 데이터셋 유형 (From TYPE=)
41 VARNUM 변수 번호

[ 문자형과 숫자형 변수 ]

no 유형
(type)
약어
(abbrevation)
설명
1 숫자형(numeric) N 숫자로 이뤄진 변수
2 문자형(character) C 문자로 이뤄진 변수
3 이항형(binary) B 값이 0 또는 1, Y 또는 N만 가질 수 있는 변수
(Target 변수의 유형 구분이 필요한 경우 사용)

 

'DATA Log' 카테고리의 다른 글

MSSQL DATA 정수,소수 길이 구하기(SQL)  (1) 2022.12.29
SQL 쿼리 시각화 분석  (0) 2022.12.22
10의 승 명칭 확인  (0) 2022.09.07

복잡한 쿼리가 있어 해당 쿼리문의 JOIN 등 컬럼간의 연관도를 알고 싶어서 찾던중 혹시나 검색하니

Visual하게 확인 할 수 있는 사이트를 찾았다. 추후 업무 진행에 쓴다면 유용 할 듯~ ^^

 

https://sqlflow.gudusoft.com/

'DATA Log' 카테고리의 다른 글

MSSQL DATA 정수,소수 길이 구하기(SQL)  (1) 2022.12.29
SAS 변수 메타정보 DATABASE 변환을 위한정보  (0) 2022.12.29
10의 승 명칭 확인  (0) 2022.09.07

데이터가 커짐에 따라 사용되는 용어에 대해 알아봅니다.

 

퀘카(quecca) : Q 10의 30승

론나(ronna) : R 10의 27승

요타(yotta) : Y 10의 24승

제타(zetta) : Z 10의 21승

엑사(exa) : E 10의 18승

페타(peta) : P 10의 15승

테라(tera) : T 10의 12승

기가(giga) : G 10의 9승

메가(mega) : M 10의 6승

킬로(kilo) : k 10의 3승

밀리(milli) : m 10의 –3승

마이크로(micro) : μ 10의 –6승

나노(nano) : n 10의 –9승

피코(pico) : p 10의 –12승

펨토(femto) : f 10의 –15승

아토(atto) : a 10의 –18승

젭토(zepto) : z 10의 –21승

욕토(yocto) : y 10의 –24승

론토(ronto) : r 10의 –27승

퀙토(quecto) : q 10의 –30승

 

*2022년 11월에 열릴 제 27차 총회에서 새로운 접두어인 Ronna(10^{27})/ronto(10^{-27}), Quetta(10^{30})/quecto(10^{-30})의 추가와 관련된 내용이 다뤄질 예정이다. 

+ Recent posts