서버에서 날짜를 받아서 계산을 하는 프로그램을 만들었는데,
사무실에서는 잘되는데, 외부에서는 오류가 난단다.
SELECT top 1 Getdate()
FROM TM_MAGAM;
원인을 찾아본 결과...
사무실에서는 "2010-11-29 13:44:08" 이런식으로 나오는데,
집에가서 테스트를 해보니
"11 29 2010 1:28오후" 이런식으로 리턴이 된다...-_-;;
나는 사무실에서 나온데로 나오는줄 알고,
별 생각없이 Left(값, 10) 이런식으로 변환을 했더니 오류가 나는곳이 있다.
이런 문제는 사용자나 다른 어플이 제어판의 날짜 포멧을 기본값에서 변경해서 벌어지는 문제인데, 제어판 -> 국가 및 언어에서 설정을 하면 될듯도 하지만, 뭔가 근원적인 해결책을 찾는것이 필요
ms-sql에서는 convert()라는 함수를 통해서 getdate로 받아온 값을 특정 타입 형태로 변환을 할수 있음
Select Getdate()
YYYY/MM/DD
Select Convert(varchar(10),Getdate(),111)
YYYYMMDD
Select Convert(varchar(10),Getdate(),112)
HH:MM:SS
Select Convert(varchar(8),Getdate(),108)
HH:MM:SS:mmm
Select Convert(varchar(12),Getdate(),114)
HHMMSS
Select Replace(Convert(varchar(8),Getdate(),108),':','')
HHMMSSmmm
Select Replace(Convert(varchar(12),Getdate(),114),':','')
YYYY/MM/DD HH:MM:SS
Select Replace(Convert(varchar(30),Getdate(),120),'-','/')
YYYY/MM/DD HH:MM:SS
Select Replace(Convert(varchar(30),Getdate(),121),'-','/')
YYYY/MM/DD HH:MM:SS
Select Convert(varchar(10),Getdate(),111) + Space(1) + Convert(varchar(8),Getdate(),108)
Select Convert(varchar(10),Getdate(),112) + Replace(Convert(varchar(8),Getdate(),108),':','')
인터넷을 찾아보니 이런식으로 변환을 하면 된다고...
SELECT top 1 Convert(varchar(10),Getdate(),111)
FROM TM_MAGAM;
나도 대략 이렇게 해서 어디서나 같은 포멧의 값이 나오도록 해결...
이런 경우를 겪게되면 제어판을 만지기보다, convert 함수를 이용해서 제대로 데이터를 가져오는것이 좋을듯한데, 비단 mssql같은 db에 국한된 문제가 아니라, 프로그래밍을 하다보면 날짜포멧문제로 이런 문제가 생기고는 하는데, 막상 특정 PC컴퓨터에서 이런 문제가 발생하면 디버깅해서 찾아내기도 쉽지 않다는것이 문제...
한두번 사용하고 말것이라면 상관없지만, 자주 사용한다면 위의 구문을 프로시져 함수로 만들어 놓고 사용하는것도 하나의 팁이 될수도
뭐 별내용 아니지만, 혹시나 도움이 될수도 있지 않을까 싶어서 포스팅을 해놓습니다.
데이터베이스(Database)의 트랜젝션(Transaction)의 개념과 뜻은 무엇인가? (Commit, Rollback)
SQLite Editor, 안드로이드 DB 내용 변경, 입력, 확인용 관리 앱 프로그램 사용방법 리뷰
pbcatfmt 개체에 대한 SELECT 사용 권한이 거부되었습니다
CA ERWin, 데이터베이스 데이터모델링 툴(Database DB Data Modeling Case Tool)