web-dev-qa-db-ja.com

MS Accessクエリで文字列を日付に変換

access列に基づいてDateテーブルからデータを取得しようとしています。私の要件は、特定の値より大きいすべてを表示することです。私はcastの値、つまりstringをフォーマット&CDate関数はdatetimeデータ型であり、オーバーフローとしてスローされます。

クエリは次のとおりです。

Select * from Events
Where Events.[Date] > cDate(Format("20130423014854","yyyy-MM-dd hh:mm:ss"))

テーブルのサンプル日付レコード値:2013-04-23 13:48:54.0

Events.[Date]accessの日付/時刻型フィールドです

どうすれば修正できますか?

11
user2385057

DateValue()関数を使用して、stringdateデータ型に変換します。これが最も簡単な方法です。

DateValue(String Date) 
11
Diego dot net

AccessでCreate > Moduleおよび次のコードを貼り付けます

Public Function ConvertMyStringToDateTime(strIn As String) As Date
ConvertMyStringToDateTime = CDate( _
        Mid(strIn, 1, 4) & "-" & Mid(strIn, 5, 2) & "-" & Mid(strIn, 7, 2) & " " & _
        Mid(strIn, 9, 2) & ":" & Mid(strIn, 11, 2) & ":" & Mid(strIn, 13, 2))
End Function

ヒット Ctrl+S モジュールをmodDateConversionとして保存します。

今のようなクエリを使用してみてください

Select * from Events
Where Events.[Date] > ConvertMyStringToDateTime("20130423014854")

---編集---

ユーザー定義のVBA機能を回避する代替ソリューション:

SELECT * FROM Events
WHERE Format(Events.[Date],'yyyyMMddHhNnSs') > '20130423014854'
5
Gord Thompson

基本的に、これはうまくいきません

Format("20130423014854","yyyy-MM-dd hh:mm:ss")

format関数は、文字列の形式が正しい場合にのみ機能します

Format (#17/04/2004#, "yyyy/mm/dd")

また、[Date]フィールドのデータ型を指定する必要があります。これは、この値2013-04-23 13:48:54.0を[一般日付]フィールドの下に配置できないためです(MS Access2007を使用)。このトピックを表示することをお勧めします。 間に日付を選択

2
Nexus
cdate(Format([Datum im Format DDMMYYYY],'##/##/####') ) 

句読点を含まない文字列を日付に変換します

1
accessuser

2014-09-01以降にすべてのレコードを表示する必要がある場合は、これをクエリに追加します。

SELECT * FROM Events
WHERE Format(Events.DATE_TIME,'yyyy-MM-dd hh:mm:ss')  >= Format("2014-09-01 00:00:00","yyyy-MM-dd hh:mm:ss")
0
Jing Lei