본문 바로가기

프로그래밍376

C# 1년전 같은주차 같은요일 날짜 구하기 검색 조건 세팅 중에기준일자 대비 1년전 같은주차 같은요일 날짜 구해달라는게 있었다.삽질하다가 만든 허접한 클래스이다.필요하신 분은 사용해 보시고 버그가 있으면 피드백 주셔서 발전시켰으면 한다. public class CustmizeCalendar { #region 전역변수 System.Globalization.DateTimeFormatInfo dfi = System.Globalization.DateTimeFormatInfo.CurrentInfo; System.Globalization.Calendar cal = System.Globalization.CultureInfo.InvariantCulture.Calendar; #endregion #region 생성자 /// /// 생성자 /// public Cus.. 2014. 10. 23.
C# OLEDB로 엑셀 읽기 시 문자 또는 숫자가 읽히지 않을 때 엑셀 읽어서 체크드 리스트에 바인딩하고 있었다.테스트로 만든 엑셀에 데이터를 1열에 1, 2, 3, 4, AAA, 5, 6, 7 이렇게 넣었다.그런데 AAA가 빈 문자열로 읽혀지는 것이었다.그래서 구글링을 했더니 역시나 해답은 있었다.OLEDB 연결자에 IMEX=1을 추가해 주면 된다. 엑셀을 읽을 때, 처음 몇 로우를 읽은 후 얘가 문자열 타입인지 숫자 타입인지 결정한다고 한다. 그럴 경우, 다른 타입의 데이터가 들어가 있으면 위와같은 문제가 발생하는 것이었다.내 경우는 1, 2, 3, 4 읽었더니 "어!! 숫자네" 하다가 AAA가 나오니 무시한 거였드랬다.즉, 어땠든 IMEX는 Default가 0이다. IMEX=1로 하면 되더라는 말씀 2014. 9. 17.
MSSQL varchar 데이터 형식을 datetime 데이터 형식으로 변환하는 중 값 범위를 벗어났습니다. 쿼리를 작성중에 날짜 비교가 있었다."varchar 데이터 형식을 datetime 데이터 형식으로 변환하는 중 값 범위를 벗어났습니다." 그런데 이런 에러메시지가 출력되었다. 아주 간단한 문장이었는데.DECLARE @MINDT CHAR(10)SET @MINDT = '2014-04-31'위의 @MINDT를 비교문에 쓰면 에러가 나는 것이었다.에러가 난 쿼리는 아래와 같다.SELECT * FROM TABLE_A WHERE CREATEDATE > @MINDT아주 간단한 쿼리였는데 문제를 잡지 못했다. 그러다가 유레카~2014년 4월의 마지막날이 30일이었기 때문이었다.SET @MINDT = '2014-04-30'위와 같이 값을 바꾸니 해결되었다. CREATEDATE 가 DATETIME인데 문자열과 비교하려고 .. 2014. 8. 12.
MSSQL 누적합 구하기 매장별 월 누적 합계가 필요해서 찾아봤더니 아래 같이 셀프조인으로 처리하는 방식이 있어 기재한다. 마트 구성이나 집계 화면 개발 시 자주 사용하니 기억할 것. CTE 쿼리 때문에 mssql 2005 버전이상 부터 사용가능하다.하위 버젼은 임시테이블 또는 커서를 이용해서 해야 하니 다른 자료를 참조해야 한다. WITH ADDSUM AS(selecta.prodkey --상품코드,prodDt --yyyy-mm-dd,sum(a.TotalAmt) sumAmt --판매금액,ROW_NUMBER() OVER(PARTITION BY A.prodkey ORDER BY A.prodkey, pordDt) ROfrom salesmt a --판매테이블where 1=1and a.createdate between '2011-05-0.. 2014. 7. 15.
MSSQL 피벗 사용하기 집계 쿼리 시 빈번하게 사용되는 피벗 쿼리MSSQL에서 피벗은 2005버전 이상부터 사용 가능하다. 하위 버전은 case when으로 구현해야 한다. 동적 피벗을 만들어서 사용하기도 하니 알아두도록 하자. -- Pivot table with one row and five columns SELECT 'AverageCost' AS Cost_Sorted_By_Production_Days, [0], [1], [2], [3], [4] FROM (SELECT DaysToManufacture, StandardCost FROM Production.Product) AS SourceTable PIVOT ( AVG(StandardCost) FOR DaysToManufacture IN ([0], [1], [2], [3], [.. 2014. 7. 10.
SQL 테이블 목록 확인 및 특정 컬럼 포함 테이블 보기 테이블을 검색하고 싶을 때 [MSSQL]SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%테이블%' [ORACLE]SELECT * FROM ALL_TABLES WHERE TABLE_NAME LIKE '%대소문자 가림%' 특정컬럼을 포함한 모든 테이블 확인 [MSSQL]--필요한 컬럼만 SELECT 하면 됨 --X_TYPE에 따라 테이블, 뷰 구분할 수 있음SELECT * FROM SYS.all_columns A INNER JOIN SYSOBJECTS B ON A.object_id = B.ID WHERE A.NAME = '컬럼명' [ORACLE]SELECT * FROM COLS WHERE COLUMN_NAME = '컬럼명' 2014. 6. 23.
MSSQL 1~100 까지 더미 테이블 생성하고 싶을 때 오라클에서는 1~100까지 더미 테이블을 생성할 때 아래 같이 한다. SELECT LEVEL FROM DUAL CONNECT BY LEVEL 2014. 6. 9.
오라클, 중복 데이터 삭제하기 아주 간단한 테이블을 만들더라도 잘 생각해야 된다. 귀찮다고 실천하지 않으면 꼭 이 작업을 하게 된다.반드시 데이터 무결성을 위한 수고를 아끼지 말자.어쨌든, 중복데이터를 삭제해야 할 일이 생겼다. 물론 테스트 중인 프로세스여서 크게 문제는 없지만..운영중에 발생했다면 아주 짜증 났을듯. 아래처럼 하자. delete from table_awhere rowid in (select rowidfrom(select * from(select ROW_NUMBER() OVER (PARTITION BY key_col_1 ORDER BY key_col_1) AS num, key_col_1from table_a)where num >= 2)) 2014. 4. 1.
MSSQL 테이블 변경 시, "변경 내용을 저장할 수 없습니다.." 나올 때 테이블 디자인을 변경하려고 하니 "변경 내용을 저장할 수 없습니다" 메시지가 나왔다. 아래와 같이 옵션을 조절한다.단, 해당 옵션을 해제할 경우 문제가 발생할 수 있다고 하니 MSDN을 반드시 확인하고 적용할 것. 테이블 다시 생성 해야 하는 변경 내용을 저장 안 함 옵션을 변경 하려면 다음과이 같이 하십시오.SQL Server Management Studio (SSMS)를 엽니다.도구 메뉴에서 옵션을 클릭 합니다.옵션 창의 탐색 창에서 디자이너를 클릭 합니다.선택 또는 테이블 다시 생성 해야 하는 변경 내용을 저장 안 함 확인란의 선택을 취소 하 고 확인을 클릭 합니다. http://support.microsoft.com/kb/956176/ko위 링크 확인할 것. 2014. 3. 12.
C# request 인코딩 처리하기 후아..EUC-KR로 받는 시스템과 인터페이스를 진행했다.후... 고생고생하며 했는데결과는 웹에 있는 소스를 사용하면 됬다는것..받는 업체 쪽에서도 정확한 가이드를 주지 않아 더 고생했음.정상으로 주고 받은 소스는 아래에.. string url = "param1=가나다¶m2=헤헤헤; System.Net.WebRequest req = System.Net.WebRequest.Create("http://url"); byte[] param = UTF8Encoding.UTF8.GetBytes(url); req.Method = "POST"; req.ContentType = "application/x-www-form-urlencoded; charset=UTF-8"; req.ContentLength = para.. 2014. 2. 5.
DataRow에서 rowID 구하기 C# DataRow 에서 rowID 접근하려면속성으로 지원이 되지 않기 때문에 아래처럼 해야 한다. System.Reflection.FieldInfo fInfo = drRow.GetType().GetField("_rowID", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);int rowID = Convert.ToInt32(fInfo.GetValue(drRow));rowID = rowID - 1; 실제로 1을 빼야 Zero base 가 됨. 끝 2014. 2. 3.
C# 에서 웹브라우져 실행시키기 C# 에서 웹브라우져 실행시키기 System.Diagnostics.Process.Start("http://url");로 하면 기본 브라우져가 열린다. 끝 2014. 2. 3.
C# 초간단 파일 검색 asp.net으로 파일 검색을 간단하게 구현해야 했다. 뚝딱 만들어서 처리한 내용 c# 부분만 발췌한다. protected void Page_Load(object sender, EventArgs e) { if (ItemNm.Text == "") { lblItemNm.Text = ""; return; } StringBuilder s = new StringBuilder(10000); System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(@"E:\ITEM_IMAGES"); System.IO.FileInfo[] fs = di.GetFiles("*" + ItemNm.Text + "*"); //s.Append("*" + ItemNm.Text + "*"); foreac.. 2014. 1. 15.
MSSQL, 테이블 사용중인 프로시져 알아내기 Select object_name(id) From syscomments Where text like '%테이블명%' Group by object_name(id) Order by object_name(id) 위 처럼 간단하게 조회할 수 있다. 끗 2013. 12. 18.
MSSQL 플랜캐시 확인 쿼리 얼마 전 서버 이전 작업을 했다. 그런데 정상으로 작동하던 시스템이 조금 꼬이는 현상이 발견됬다.그중 특이한 증상 중 하나... 쿼리 분석기와 클라이언트(웹단)의 프로시저 실행 속도의 차이가 발생하는 것이었다. 웹단은 팝업창이 실행되면서 콤보 박스에 데이터를 세팅하는 부분이 있었는데, 그 프로시저에 문제가 발생하게 된 것.프로파일러로 추적하니 15초가 소요되는 것을 발견, 쿼리분석기로 직접 실행하니 1초. 하참~~이런 저런 방법을 써봤으나, 무용지물. 해결 방법 찾던 중 아래의 프로시저의 플랜캐시 확인에 대한 글이 있어서 참조해 봤다. 해결은 이 글과는 크게 상관 없었지만 힌트는 얻을 수 있었다. 아래는 플랜캐시를 확인했던 쿼리와 펌링크이다.출처 : http://www.sqler.com/269485쿼리S.. 2013. 9. 25.
64bit MSSQL 2008 R2 에서 32bit Oracle DB 링크 걸기 후아~ 진짜 고생했다. 오라클 클라이언트만 10번도 넘게 깔았다 지웠다 했네... 찾다찾다 글 하나를 발견하는데....유레카~~ 아래 포스팅을 따라서 했더니 되었다.http://blog.naver.com/PostView.nhn?blogId=metalbear&logNo=40170264823&redirect=Dlog&widgetTypeCall=true위 포스트 주인장께 감사드린다.아래는 주인장이 참고했다는 원글 주소http://thiruna.blog.com/2010/10/28/making-linked-server-connection-between-sql-server-64-bit-oracle-32-bit/ 요약1. 오라클 클라이언트 32비트를 설치한다.2. 오라클 클라이언트 64비트를 설치한다. 단, 32 비.. 2013. 8. 29.
MSSQL 문자열 잘라서 테이블 반환 함수 ALTER FUNCTION [dbo].[FN_SPLIT]( @StrValue VARCHAR(MAX), -- 분리할 문자열 @SplitChar VARCHAR(1) -- 구분할 문자) RETURNS @SPLIT_TEMP TABLE ( VALUE VARCHAR(50) )AS BEGIN DECLARE @oPos INT, @nPos INT DECLARE @TmpVar VARCHAR(1000) -- 분리된 문자열 임시 저장변수 SET @oPos = 1 -- 구분문자 검색을 시작할 위치 SET @nPos = 1 -- 구분문자 위치 WHILE (@nPos > 0) BEGIN SET @nPos = CHARINDEX(@SplitChar, @StrValue, @oPos ) IF @nPos = 0 SET @TmpVar = R.. 2013. 4. 24.
오라클 DECODE, GREATEST 로 음수값 처리하기 음수면 0으로 반환하고 싶을 때, 처리하는 방법을 궁리했다. 구글의 힘으로 조합하니 아래와 같이 2가지 정도가 좋을 듯. 음수면 무조건 0을 반환하고 싶으면 GREATEST 함수를 사용하자.GREATEST(변수, 0) 하면 끝이다. 이 함수는 인자 중에 가장 큰 값을 반환해 주는 함수인데, 음수 보다 0이 크니 변수가 음수일 경우 0이 반환된다. 두번째는 부호에 따라 처리해야 하면DECODE(SIGN(변수), 1, 0, 변수)SIGN함수는 부호를 반환해 주는데, 양수면 1, 음수면 -1, 0이면 0이 반환된다. 그에 따라 알아서 사용하면 될 듯. 끝~ 2013. 4. 10.
MSSQL 0으로 나누기 오류 처리하기 ISNULL로 처리해도 되지만 부득이하게 0으로 나누는 오류를 봐야 할 경우 아래 옵션을 추가하면 NULL로 반환해 준다. SET ANSI_WARNINGS OFF; SET ARITHIGNORE ON; SET ARITHABORT OFF; 가끔 써먹을 일이 있어서 적어둠 2013. 4. 9.
JavaScript 쿠키 Cookies JavaScript Cookies What is a Cookie?cookie는 방문자 컴퓨터에 저장된 변수이다. 각각의 컴퓨터에 브라우져를 통해 cookie 정보를 저장할 수 있다. JavaScript를 통해 cookie 변수를 만들고 사용할 수 있다. Create and Store a Cookie방문자가 사이트에 처음 방문했다면 쿠키를 만들어 넣을 수 있다. 방문자에게 이름을 받았다면 그 이름을 쿠키에 넣을 수 있다. 그리고 다음번 방문 시, 같은 페이지에 접근했을 때, 방문자에게 인사 메시지를 보여줄 수 있는 것이다.자, 쿠키를 생성해서 방문자 컴퓨터에 남기는 함수를 보도록 하자. function setCookie(c_name,value,exdays) { var exdate=new Date(); ex.. 2013. 1. 5.