'개발관련/Database'에 해당되는 글 8건
- 2021.03.26 파일에서 Data를 직접 Table로 Import 시키기(MySQL)
- 2021.03.23 MySQL 날짜날짜 관련 사항들
- 2012.07.16 특정 Table이 존재하는지 확인하기
- 2011.08.05 SQL서버에서 WebService 호출
- 2011.04.15 Database 트렌젝션 로그 줄이기
- 2008.08.18 datetime 형식을 yyyy-MM-dd 형식으로 하기
- 2008.06.30 서브쿼리 안쪽에서 Order by를 쓸경우
- 2008.05.07 오늘날자에 해당하는 주의 월요일, 금요일 날자 가지고 오기
파일에서 Data를 직접 Table로 Import 시키기(MySQL)
MySQL(MariaDB) 에서 구분자로 구분되어 있는 파일을 읽어 바로 Table에 집어 넣는 기능
LOAD DATA INFILE 파일이름 INTO TABLE 테이블이름
FIELDS TERMINATED BY 컬럼구분자
LINES TERMINATED BY 라인구분자
(
컬럼으로 구분되는 항목 대응 변수들(@로 시작)
) SET
각 컬럼명 = 변수들(후처리가 필요한 경우 사용)
LOAD DATA INFILE 파일이름 INTO TABLE 테이블이름위의 항목을 다 써야 하는 것은 아니고,
FIELDS TERMINATED BY 컬럼구분자
이정도만 써도 동작은 할 수 있음
예제 : (SET이하 부분에 괄호가 없음에 주의!!!)
LOAD DATA INFILE 'c:\\temp\\sample.txt' INTO TABLE tbl_sample
FIELDS TERMINATED BY '^'
LINES TERMINATED BY '\r\n'
(
@code1,
@code2,
@code3
) SET
`code1` = @code1,
`code2` = TRIM(@code2),
`code3` = @code3,
`InsertDate` = date_format(NOW(),'%Y%m%d%H%i%S');
관련 내용:
1. table의 컬럼갯수가 data 파일의 컬럼갯수 보다 많은 경우(추가 데이터가 필요한 경우)
: 위의 예제처럼 SET 부분에 컬럼명 및 데이터를 써줌
2. 파일의 내용에 대한 수정이 필요한 경우
: 위의 예제 처럼 SET 부분에 TRIM같은 식으로 후 처리 가능
3. Table의 마지막 컬럼에서 데이터 사이즈 경고가 나오는 경우
: 줄 끝에 대한 인식이 정상적으로 처리 되지 않아서 발생하는 현상으로 LINES TERMINATED BY 문을 사용하면 됨
MySQL 날짜날짜 관련 사항들
- 현재 날짜 시간 가져오기
: CURDATE() -> 현재 날짜(YYYY-MM-DD)
: CURTIME() -> 현재 시간(HH:MI:SS)
: NOW(), SYSDATE() -> 현재 날짜, 시간 합쳐서 나옴
- 날짜 형식 설정
: DATE_FORMAT(시간, 형식문자열)
: 형식 문자열은 아래와 같음
%Y | 연 | 4자리 연도 |
%y | 연 | 2자리 연도 |
%m | 월 | 2자리 (00-12) |
%c | 월 | 1자리, 10보다 작을경우 (1-12) |
%M | 월 | 이름(January, February…) |
%b | 월 | 줄인 이름(Jan, Feb…) |
%d | 일 | 2자리 (00-31) |
%e | 일 | 1자리, 10보다 작을경우 (0-31) |
%D | 일 | 1st, 2nd… |
%H | 시 | 24시간 형식 (00-23) |
%h | 시 | 12시간 형식 (01-12) |
%I | 시 | 12시간 형식 (01-13) |
%k | 시 | 24시간 형식, 10보다 작을경우 한자리 (0-23) |
%l | 시 | 12시간 형식, 10보다 작을경우 한자리 (1-12) |
%i | 분 | 2자리 (00-59) |
%S | 초 | 2자리 (00-59) |
%s | 초 | 2자리 (00-59) |
%f | 마이크로초 | 100만분의 1초 |
%p | 오전/오후 | AM/PM |
%T | 시분초 | 24시간 형식 (hh:mm:ss) |
%r | 시분초 오전/오후 | 12시간 형식 (hh:mm:ss AM/PM) |
%j | 일 | 그해의 몇번째 일인지 표시 (001-366) |
%w | 일 | 그주의 몇번째 일인지 표시 (0=일요일, 6=토요일) |
%W | 주 | 이름(Monday,Tuesday…) |
%a | 주 | 줄인 이름(Mon,Tue…) |
%U | 주 | 그해의 몇번째 주인지 표시 (00-53) 일요일이 주의 첫번째일 |
%u | 주 | 그해의 몇번째 주인지 표시 (00-54) 월요일이 주의 첫번째일 |
%X | 연 | 그주가 시작된 해을 표시, %V와 같이 사용 |
%x | 연 | 그주가 시작된 해을 표시, %v와 같이 사용 |
%V | 주 | 그주가 시작된 해의 몇번째 주인지 표시 (01-53) 일요일이 주의 첫번째일 %X 와 함께사용 |
%v | 주 | 그주가 시작된 해의 몇번째 주인지 표시 (01-53) 월요일이 주의 첫번째일 %x 와 함께사용 |
: 위의 표는 m.blog.naver.com/callsonda/220363810001 이곳의 표가 잘 만들어져 있어서 내용을 가져왔습니다.
특정 Table이 존재하는지 확인하기
select * from DB이름.information_schema.tables where table_name=N'테이블이름'
이렇게 호출해서 결과가 있으면 테이블이 있는 것이고 없으면 테이블이 없는 것임
SQL서버에서 WebService 호출
그건 다들 절대로 하지 말라는 분위기임
일단, 아직 적용을 안해봤기 때문에 아래 소스가 돌아갈지 여부는 잘 모르겠음
외국의 포럼에서 긁어온 소스인데, 돌아갈지 여부는 뭐...나중에 확인 후 수정 예정
아래의 소스를 실행하기 위해선 OLE Automation 옵션을 활성화 시켜야 한다고 함
활성화 방법은
-------------------------------------------------------------------------------------------
쿼리로 실행하는 법
sp_configure 'show advanced options', 1;
이렇게 호출하면 활성화 됨.(물론 처음 세팅할때만)
일단 정보를 위해서 보관용으로;;
로컬에 설치된 SQL Server 2008 Express R2로 확인해 본 결과
정상 동작함(물론 위의 설정 쿼리를 한번 돌려준 상태임)
Database 트렌젝션 로그 줄이기
select name,recovery_model_desc from sys.databases
select name,size from sys.database_files
datetime 형식을 yyyy-MM-dd 형식으로 하기
다른거 없음. 저 쿼리 하나만 참고할것.
오늘 날자가 2008-08-18일이면 '2008-08-18' 로 결과값 나옴
저 120이라는 숫자가 매일 기억이 안나서 지겨워서 써놓음
서브쿼리 안쪽에서 Order by를 쓸경우
그런 경우가 없는것이 좋은것이고,
되도록 없게 가야 하겠지만, 부득이하게 쓰게 될 경우가 있다.
SQL Server에서는 서브쿼리에 order by를 못쓰게 오류가 나오는데, 이때는 order by가 들어가야 하는 쿼리에
Top을 100%로 지정해 주면 해결 가능하다
-- 오류발생
Select aaa,bbb
(
Select aaa,count(cccc) as ddd from tblTest group by aaa order by ddd
) asdf
-- 해결
Select aaa,bbb
(
Select top 100 percent aaa,count(cccc) as ddd from tblTest group by aaa order by ddd
) asdf
물론, 성능이나 그런거 일단 접어두고 어쩔수 없는 경우에만 생각할것.
(성능에 대해선 확인해 보지 않았음)
오늘날자에 해당하는 주의 월요일, 금요일 날자 가지고 오기
Select dateadd(dw, 2-Datepart(dw,getdate()),getdate()),dateadd(dw, 6-Datepart(dw,getdate()),getdate())
- 제한사항 :
1. 시스템 설정이 일요일이 1번으로 되어 있어야 함
2. 시간은 알아서 띠어 낼것