2021. 3. 26. 12:16

파일에서 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 문을 사용하면 됨

 

참고 URL : dev.mysql.com/doc/refman/8.0/en/load-data.html

2021. 3. 23. 10:43

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 이곳의 표가 잘 만들어져 있어서 내용을 가져왔습니다.

2012. 7. 16. 18:29

특정 Table이 존재하는지 확인하기

select * from DB이름.information_schema.tables where table_name=N'테이블이름'


이렇게 호출해서 결과가 있으면 테이블이 있는 것이고 없으면 테이블이 없는 것임

2011. 8. 5. 10:51

SQL서버에서 WebService 호출

원래 트리거에서 호출해 볼까 했는데,
그건 다들 절대로 하지 말라는 분위기임

일단, 아직 적용을 안해봤기 때문에 아래 소스가 돌아갈지 여부는 잘 모르겠음
외국의 포럼에서 긁어온 소스인데, 돌아갈지 여부는 뭐...나중에 확인 후 수정 예정

아래의 소스를 실행하기 위해선 OLE Automation 옵션을 활성화 시켜야 한다고 함
활성화 방법은


For SQL Server 2005 you have to enable the "OLE Automation" option.
Start-> Programs - > Microsoft SQL Server 2005 -> Configuration Tools ->SQL Server Surface Area Configuration
Click the link Surface Area Configuration for Features
Expand the DB -> Database Engine
Select OLE Automation & Check the checkbox Enable OLE Automation..

-------------------------------------------------------------------------------------------
쿼리로 실행하는 법

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ole Automation Procedures', 1;
GO
RECONFIGURE;
GO 

이렇게 호출하면 활성화 됨.(물론 처음 세팅할때만) 



이렇게 써 있었음...;; 아직 안해봐서.. -_-);
일단 정보를 위해서 보관용으로;;

로컬에 설치된 SQL Server 2008 Express R2로 확인해 본 결과
정상 동작함(물론 위의 설정 쿼리를 한번 돌려준 상태임)

Declare @Object as Int;
Declare @ResponseText as Varchar(8000);
 
Code Snippet
Exec sp_OACreate 'MSXML2.XMLHTTP', @Object OUT;
Exec sp_OAMethod @Object, 'open', NULL, 'get','http://www.webservicex.com/stockquote.asmx/GetQuote?symbol=MSFT','false'
Exec sp_OAMethod @Object, 'send'
Exec sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT
 
Select @ResponseText
 
Exec




 
2011. 4. 15. 10:54

Database 트렌젝션 로그 줄이기

DB 트렌젝션 로그 줄이기
-- 2000용
--BACKUP LOG VALLY_SERVER WITH TRUNCATE_ONLY
--DBCC SHRINKFILE(로그이름,1)

-- 2008용
-- 일단 DB Recovery모델을 full 에서 simple로 변경하여야 한다
select name,recovery_model_desc from sys.databases
Alter database DB이름 SET Recovery simple

select name,size from sys.database_files
DBCC SHRINKFILE (N'DB이름_log' , 1)



-- 2008용 테이블별 용량확인쿼리
SELECT CONVERT(VARCHAR(30), MIN(O.NAME)) AS TABLENAME, LTRIM(STR(SUM(RESERVED) * 8192.0 / 1024.0 / 1024.0, 15,0)) AS TABLESIZE
FROM SYSINDEXES I INNER JOIN SYSOBJECTS O ON (O.ID = I.ID)
WHERE I.INDID IN (0, 1, 255) AND O.XTYPE = 'U'
GROUP BY I.ID
2008. 8. 18. 15:23

datetime 형식을 yyyy-MM-dd 형식으로 하기

SELECT convert(varchar(10),getdate(),120)

다른거 없음. 저 쿼리 하나만 참고할것.

오늘 날자가 2008-08-18일이면 '2008-08-18' 로 결과값 나옴
저 120이라는 숫자가 매일 기억이 안나서 지겨워서 써놓음

2008. 6. 30. 20:27

서브쿼리 안쪽에서 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


물론, 성능이나 그런거 일단 접어두고 어쩔수 없는 경우에만 생각할것.
(성능에 대해선 확인해 보지 않았음)

2008. 5. 7. 11:09

오늘날자에 해당하는 주의 월요일, 금요일 날자 가지고 오기

오늘 날자에 해당하는 주에 월요일 날자와 금요일 날자를 가지고 오는 Select 쿼리

Select dateadd(dw, 2-Datepart(dw,getdate()),getdate()),dateadd(dw, 6-Datepart(dw,getdate()),getdate())


- 제한사항 :
1. 시스템 설정이 일요일이 1번으로 되어 있어야 함
2. 시간은 알아서 띠어 낼것