2012-05-11 10 views
2

私はMS Access 2003にインポートした別のプログラムによって作成されたテキストファイルを持っています。 日付フィールド&は3つの別々のフィールドに分割されています。 1つの日付/時刻フィールドを作成したいと思います。ここでは、データの一例である:MS Access:別のyear、day_countおよびtimeフィールドを日付/時刻に変換します。

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

YEAR:YYYY形式で年

DAY:年の日。例えば001は1月1日を表します。私が対応する日付/時刻値で追加のフィールドを作成するにはどうすればよい

HHMMSS

の時間:034年2月

TIMEの3番目のだろうか? ありがとうございます。

答えて

2

この例では、そのYEAR、あなたのテーブルがMyTable命名されていると仮定DAY_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 /" &[YEAR])+を二度` 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を使用することはできませんでした。それは天才です^ _^ –

+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月1日に変換します。それに日数を加え、日付形式に変換します。これをクエリに入れることができます。

CalcDate:CDate関数(CLNG(CDate関数( "01/01 /" & [年]))+ [日] -1)

+1

私は理解していない-1' – HansUp

+0

を@ HansUp - 私はこれをテストし、テストしました。整数が日として扱われ、日付に追加され、Accessで日付を取得することができます。 CLng()は、私が日数を知っていることを助けました。 – JeffO

関連する問題