2

MS Access 選択クエリ内で DatePart() を使用して、最初は文字列形式の日付から月と年を数値として抽出しようとしています。


「YYYY-MM-DD HH:NN:SS.0000000」


他の誰かによって書かれた最初のコードは次のように述べています。

DatePart("m", date)
DatePart("yyyy", date)

しかし、クエリの実行時に「データ型、基準の不一致」エラーが発生していたため、Cdate() を使用して文字列を日付型に変換しようとしました。

DatePart("m", Cdate(date))
DatePart("yyyy", Cdate(date))

ただし、これで問題は解決しませんでした。私の最初の日付文字列が Cdate() で変換できる形式になっていないのか、それとも私のような日付文字列から部分的な数値日付を抽出する簡単な方法があるのか​​ 疑問に思っています。

この質問が不完全な場合に備えて、状況についてさらに詳しく説明する準備ができていますが、先回りしたくありません.

4

2 に答える 2

1

それらの余分なゼロは問題になるでしょう、それらを取り除くために、あなたは言うことができます

CDate(Mid(sdate, 1, InStr(sdate, ".") - 1))

それで

DatePart("m", CDate(Mid(sdate, 1, InStr(sdate, ".") - 1)))

ただし、文字列の適切な部分を参照する方が便利な場合があります。

aYr = Left(sdate,4)
aMnth = Mid(sdate,6,2)
于 2013-02-13T22:49:25.760 に答える
1

CDate小数秒が文字列の受け入れを妨げるのは正しかったです。そして、小数秒を取り除くことができます。ただし、最終的には年と月が必要なので、すべての時刻コンポーネントを無視して、日付部分だけを使用できます。

このイミディエイト ウィンドウ セッションが何か役立つかどうかを確認します。

MyString = Format(Now(), "yyyy-mm-dd hh:nn:ss") & ".0000000"
? MyString
2013-02-14 23:38:09.0000000
' if date format is always yyyy-mm-dd,
' give CDate the first 10 characters
? CDate(Left(MyString, 10))
2/14/2013 
' year
? DatePart("yyyy", CDate(Left(MyString, 10)))
 2013 
' or
? Year(Left(MyString, 10))
 2013 
' month
? DatePart("m", CDate(Left(MyString, 10)))
 2 
' or
? Month(CDate(Left(MyString, 10)))
 2 

' if date format can vary slightly, eg yyyy-m-d,
' give CDate everything before the first space
? CDate(Left(MyString, InStr(MyString, Chr(32)) -1))
2/14/2013 
? Year(CDate(Left(MyString, InStr(MyString, Chr(32)) -1)))
 2013 
? Month(CDate(Left(MyString, InStr(MyString, Chr(32)) -1)))
 2 

年と日付の数字を取得した後、それらをどうするかについては言及していませんでした。それらを文字列として結合する場合は、 を使用できますFormat()

? Format(Left(MyString, 10), "yyyymm")
201302
于 2013-02-15T07:00:55.447 に答える