2014-02-27 3 views
0

자체 데이터베이스와 함께 제공되는 응용 프로그램을 가지고 있으며이 구성에서 변경할 수있는 것은 없습니다. 그러나 우리는 데이터베이스에서 데이터를 가져 와서 보고서를 생성합니다.SQL 쿼리에서 사용자 정의 숫자로 된 datevalue를 실제 날짜로 변환합니다.

numdate = (int) '1' & <last two digits of year> & <zero-leading month> & <zero-leading day> 

는 예 :

08/10/2008 -> 1081008 
01/01/2014 -> 1140101 
27/02/2014 -> 1140227 

지금은 그냥 숫자에 당기 (나는 아주 이해를하지 않는) 어떤 이유

는 응용 프로그램의 저장은 다음 숫자로 날짜 이동 중에 실제 날짜로 변환하십시오.

어떻게하면 SQL 쿼리를 통해 변환 할 수 있습니까?

+1

어떤 데이터베이스를 사용하고 있습니까? –

+0

예제가 정의와 일치하지 않습니다. 귀하의 정의는 1yymmdd이지만 예제는 1ddmmyy입니다. –

+0

@NikhilButani Microsoft SQL Server, ODBC를 통한 연결 –

답변

1

을은 SQL 서버의 경우, 다음과 같은 작업을해야합니다 :

DECLARE @dateInt INT = 1981008 
SELECT CONVERT(DATETIME, SUBSTRING(CONVERT(VARCHAR, @dateInt), 2, 6), 12) 

당신이 코멘트를 읽고 저장하려면 Gunther는 부분 뺄셈 연산을 제거하여 성능을 향상 시켰습니다. 뺄셈에 찬성하여

SELECT CONVERT(DATETIME, CONVERT(VARCHAR,@dateInt-1000000), 12) 
+0

하위 문자열은 숫자 입력을 허용하지 않습니다. 모든 것을 처음으로 문자열로 변환하면 여전히 성능이 뛰어난가요? –

+0

INT를 사용하도록 코드를 변경했습니다. 제 시스템에서 꽤 빠릅니다. INT-> DATETIME 변환이 없기 때문에 문자열로 변환해야한다고 생각합니다 (적어도 T-SQL에서는 아는 바가 없습니다). 이 작업은 IO 및 기타 관계형 작업보다 성능에 미치는 영향이 훨씬 적습니다. –

+0

'convert (datetime, numdatecolumn-1000000,12)'를 시도했지만 잘못된 날짜를주었습니다. 문자열 변환이 필요하다고 생각합니다. 그러나 1e6을 빼서 부분 문자열을 생략했습니다. 감사! –

1

C#을 사용하는 경우이 코드를 사용할 수 있습니다. SQL에서

string dateString = "1981008"; 
      DateTime dt; 
      DateTime.TryParseExact(dateString.Remove(0,1), "yyMMdd", null, System.Globalization.DateTimeStyles.None, out dt); 

(이것은 MS SQL입니다 가정),이 시도 :

convert(datetime,'981008',112) 
관련 문제