SQL DATESERIAL関数で文字列を日付型 (Date)に変換する

DATESERIALで文字列を日付型 (Date)に変換することができます。

SQL = " SELECT DATESERIAL(Year,Month,Day) FROM テーブル名 "
又は、
SQL = " SELECT DATESERIAL(Year,Month,Day) AS 名前 FROM テーブル名 "
Set rs = CurrentDb.OpenRecordset(SQL)

DATESERIAL で文字列を日付型 (Date)に変換することができます。
月(Month)は 1 ~ 12、日(Day)は 1 ~ 31 の範囲でないと正常な日付を返しません。
引数、年(Year)月(Month)日(Day)がNullの場合や、数値として扱えない場合、「抽出条件でデータ型が一致しません」のエラーが発生します。

例: SQL = " SELECT DATESERIAL(年,月,日) AS 来客日 FROM 顧客管理 "
顧客管理テーブルの年,月,日フィールドを来客日として取得します。



BackHome BackSQL Tips

サンプルソフト
[実行時の画面]
「文字列を日付型 (Date)に変換する DATESERIAL関数」ボタンをクリックすると、
年・月・日フィールドから日付型に変換し、左のテキストボックスに表示します。
日付型であることが分かるように、右のテキストボックスにDateAddで一ヶ月を加え表示しています。

■実行画面
日付フォーム

[サンプルデータ テーブル]
データID    年  月  日
102007  3  21
112007  5  30
132007  11  26
162007  12   1
172007  12  15
182007  12  31
日付テーブル

[コード]
Option Compare Database

Private Sub コマンド8_Click()
    Dim SQL As String
    Dim rs As Recordset
    Me!テキスト1 = "DATESERIAL値" & vbCrLf
    Me!テキスト2 = "一ヶ月後の日付" & vbCrLf
    SQL = "SELECT DATESERIAL(年,月,日) FROM サンプルデータ"
    Set rs = CurrentDb.OpenRecordset(SQL)
    Do Until rs.EOF
        Me!テキスト1 = Me!テキスト1 & rs(0) & vbCrLf
        Me!テキスト2 = Me!テキスト2 & DateAdd("m", 1, rs(0)) & vbCrLf
        rs.MoveNext
    Loop
    Set rs = Nothing
End Sub

[変換できない場合のエラー]

・年、月、日フィールドがNULLの場合は、NULLが返ります。
・年、月、日フィールドに数値にできない文字がある場合は、NULLが返ります。
・例えば、2007、13、21のように月が異常な場合、「2008/01/21」が返り一ヶ月が加算され正常な日付になっています。 
・例えば、2007、3、32のように日が異常な場合、「2007/04/01」が返り一日が加算され正常な日付になっています。 

サンプルソフトのダウンロード

BackHome BackSQL Tips

Copyright(C) FeedSoft