2012-05-11 4 views
2

MS Access 2003으로 가져온 다른 프로그램에서 만든 텍스트 파일이 있습니다. 날짜 필드 & 시간 필드는 3 개의 별도 필드와 1 날짜/시간 필드를 만들고 싶습니다.MS 액세스 : 연도, 날짜 및 시간 필드를 날짜/시간으로 변환

YEAR,DAY_NUMBER,TIME 
2002,231,223405 
2004,117,000000 

년 : 여기에 데이터의 예입니다 YYYY 형식의 올해

DAY : 년의 일. 예 : 001은 1 월 1 일을 나타냅니다. 내가 해당 날짜/시간 값으로 추가 필드를 만들려면 어떻게해야합니까

HHMMSS

의 시간 : 034 월

시간의 3 것입니까? 미리 감사드립니다.

답변

2

이 예는 테이블이 MyTable라는 가정의 YEARDAY_NUMBER 필드는 모두 숫자 데이터 유형이고 TIME 필드는 텍스트이며 date_time이라는 날짜/시간 필드를 추가했습니다.

DateSerial()TimeSerial() 기능으로 업데이트 쿼리를 시도하십시오.

UPDATE MyTable 
SET date_time = DateSerial([YEAR],1,DAY_NUMBER) 
    + TimeSerial(Left([TIME],2), Mid([TIME],3,2), Right([TIME],2)); 

편집 : 나는 당신의 의도를 오해하고, 당신이 실제로 필요하지 않은 또는 날짜/시간 값을 저장하려는 경우 SELECT 쿼리를 필요로 할 때, 당신이 그것을 파생 단지 수 있습니다. 당신이 [DAY_NUMBER]`하는 CLng()`대신`의에서는 CDate ("01/01 /"& [년]) +를 두 번`에서는 CDate을()`를 사용하는 이유

SELECT 
    DateSerial([YEAR],1,DAY_NUMBER) 
     + TimeSerial(Left([TIME],2), Mid([TIME],3,2), Right([TIME],2)) 
     AS date_time 
FROM MyTable; 
+0

좋은 물건. chr – Fionnuala

+0

+1 그 달에 1을 사용하고 하루 중 31을 사용하는 것에 대해 전혀 몰랐습니다. That 's genius^_^ –

+0

@MattDonnan 최근 다른 질문으로, 당신과 Brian Camire가'DateSerial()'을 다시 한번 살펴 보았습니다. 나는 가짜 날짜로 무엇을했는지 궁금했다.'DateSerial (2012,2,31)'... 응답과 같이 보였다. 유용 할 수있다. :-) – HansUp

1
' ********************************************************************* 
' FUNCTION: CJulian2Date() 
' 
' PURPOSE: Convert a Julian day to a date. The function works with 
'   dates based on the Gregorian (modern) calendar. 
' 
' ARGUMENTS: 
' JulDay: The ordinal day of a year. Between 1 and 365 for all 
'   years, or between 1 and 366 for leap years. 
' 
' YYYY: A three or four digit integer for a year that is within the 
'   range of valid Microsoft Access dates. If YYYY is omitted, 
'   then YYYY is assumed to be the year of the current system 
'   date. 
' 
' RETURNS: A date for a valid Microsoft Access year and Julian day, 
'   or a Null value for an invalid Julian Day. 
' ********************************************************************* 

Function CJulian2Date (JulDay As Integer, Optional YYYY) 
    If IsMissing(YYYY) Then YYYY = Year(Date) 
    If Not IsNumeric(YYYY) Or YYYY \ 1 <> YYYY Or YYYY < 100 Or YYYY _ 
     > 9999 Then Exit Function 
    If JulDay > 0 And JulDay < 366 Or JulDay = 366 And _ 
     YYYY Mod 4 = 0 And YYYY Mod 100 <> 0 Or YYYY Mod 400 = 0 Then _ 
     CJulian2Date = Format(DateSerial(YYYY, 1, JulDay), "m/d/yyyy") 
End Function 

출처 : http://support.microsoft.com/kb/209922

0

연도 가지고 그 해 얀 1로 변환합니다. 날짜 수를 더하고 날짜 형식으로 변환하십시오. 이것을 쿼리에 넣을 수 있습니다.

CalcDate :에서는 CDate (하는 CLng (에서는 CDate ("01/01 /"& [년])) + [일] -1)

+1

이해가 안 -1' – HansUp

+0

을 @HansUp - 정수를 일로 처리하고 날짜에 추가하고 여전히 Access에서 날짜를 얻을 수 있다는 것을 잊어 버렸습니다. CLng()는 내가 일수를 알고 있음을 알았습니다. – JeffO