posted by 지긋이 2021. 2. 15. 14:34

데이터 누락건이 있어 누락된 데이터를 엑셀에 다운로드한 후 데이터를 입력하는 계기가 있었다.
이 때 날짜 데이터를 DB에 넣어야하는데... 자꾸 21/1/144197과 같은 숫자로 표기되었다.

사실 입력 단계에서부터 시행착오는 있었는데...
INSERT INTO 후 데이터를 입력하려하면 '이 수식에 문제가 있습니다.'가 자꾸 뜨는것!

알아보니 텍스트와 실제Cell값을 함께 쓰기 위해서는 &구분자와 '" "'의 활용이 필요했다.

예시를 들자면, 아래와 같은 날짜가 있고 실제 날짜를 입력하기 위해서는

21-1-1

아래와 같이 입력하면 된다.

INSERT INTO 테이블명 values('44197',sysdate);

여기서 44197의 숫자가 문제였는데, TEXT(Cell위치,변환형식) 함수를 이용해서 해결이 가능했다.
나의 경우 여러개의 값을 입력하는 문제로 자체적으로 실제 문장에 쓸때 수식문제가 자주 발생하여,
별도의 셀에 TEXT변환을 입력 후 해당 값을 가져오는 형태로 했으나,
값이 별로 없는 경우 그냥 사용하면 될듯하다.

예시는 아래와 같다.

1. 실제 날짜

21-1-1

2. 변환 날짜

=TEXT(F55,"yyyy-mm-dd") ==> 엑셀에 표기되는 형식 2021-01-01

3. 응용

1) 형태 : INSERT INTO 테이블명 values(텍스트데이터,넘버형데이터 ,날짜,텍스트데이터,sysdate);
2) 시트입력 :
="INSERT INTO 테이블명 
values('"&B55&"',100,'Y',trunc(to_date('"&I55&"')),'2021.02.15 입력',sysdate);"
3) 보여지는 화면 :
INSERT INTO 테이블명
values('text데이터',100,'Y',trunc(to_date('2021-01-01')),'2021.02.15입력',sysdate);
posted by 지긋이 2020. 10. 16. 11:19

프로젝트별 순수 개발자로 있다가 사내 전산팀으로 바꿨더니 할게 참 많아졌다.

그 중 요즘 제일 곤역인것은 다양한 DB... 10년간 오라클만 썼더니 하하;;
기본적인 문법은 다 비슷한데 약간씩 다른게 있었다. 별거아닌것으로 시간 소비했을때의 기분이란.. 

1. 테이블 생성/수정시 DATA TYPE
1) Numeric(p,[s]) : p 소수점 이하 자리수 포함한 총 자릿수, s 소수점 이하 자릿수[생략가능]
cf) 오라클은 Number, Mysql은 int, bigint, tinyint
2) timestamp, date
cf) 오라클은 date, Mysql은 timestamp
3) char, varchar
cf) 오라클은 char(??Byte), varchar2(??Byte), Mysql은 varchar

2. 테이블 복사
select 컬럼명 into new테이블명 from 원본테이블명 where 조건
cf) 오라클은 create table new테이블명 as select * from 원본테이블명

3. 날짜 기본형 : 현재 날짜 시간을 나타내는 명령어
getdate()
cf) 오라클은 sysdate, Mysql은 now()

4. 형타입 변환
1) CAST(필드명 AS 바꿀 타입) 
ex) cast((필드명) as varchar)
2) CONVERT(바꿀 타입(필드명))
ex1) convert(varchar(필드명))
ex2) convert(char(10),getdate(),102) => 2020.10.12
      convert(char(10),getdate(),112) => 20201012
      convert(char(10),getdate(),126) => 2020-10-16

5. 트랜잭션 기본
- 실행내용 보고 최종반영 하기
begin tran
.. 실행문
commit; 혹은 rollback;

6. NULL처리 isNull
오라클에서 흔히 쓰는 nvl은 mssql에서는 존재하지 않는다.
그럼 어떻게? 이렇게 ISNULL(A.aa, ''
ex) select isnull(left('20200226Ae',9),'') aa ,isnull(null,'없어') bb, isnull(left('ABCDEFGdate',6),'') cc

aa          bb cc
20200226A 없어 ABCDEF


7. 기타

MS-SQL은 Oracle과 같은 가상 테이블을 사용하지 않는다.
즉, from 이하를 생략하고 함수 그대로 사용이 가능하다.
ex1) Oracle 현재 시간 구하기
select sysdate() from dual;
ex2) MS-SQL 현재 시간 구하기
select getdate(); 

** 스크립트 작성
declare @변수명 타입
set @변수명 = 변수값

본문 내용

2020. 8. 29. 23:33

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

posted by 지긋이 2020. 4. 20. 11:43

1. 연도별 일자 구하기
SELECT TO_CHAR(TO_DATE(:yyyy||'1231', 'yyyymmdd'), 'ddd') dayChk FROM dual;
ex) 2018-365 / 2019--365 / 2020--366 / 2021--365

2. 시간 더하기
※ 기본형은 sysdate이지만 편의상 보기위해 to_char를 이용하여 표시함
1) 3시간 더하기 hour
select to_char(sysdate,'YYYY-MM-DD hh24:mi:ss') aa, 
        to_char(sysdate+ (interval '3' hour),'YYYY-MM-DD hh24:mi:ss') bb from dual;
- 결과 : 기본 2020-11-17 10:14:40=> 변경 2020-11-17 13:14:40
2) 3분 더하기 minute
select to_char(sysdate,'YYYY-MM-DD hh24:mi:ss') aa,
         to_char(sysdate+ (interval '3' minute),'YYYY-MM-DD hh24:mi:ss') bb from dual;
- 결과 : 기본 2020-11-17 10:16:35=> 변경 2020-11-17 10:19:35
3) 3초 더하기 second
select to_char(sysdate,'YYYY-MM-DD hh24:mi:ss') aa, 
         to_char(sysdate+ (interval '3' second),'YYYY-MM-DD hh24:mi:ss') bb from dual;