0

PHPを使用してMS.ACCESSデータベースの日付でデータを選択する方法を教えてもらえますか?たとえば、ワイルドカード(absent = 14/06/2012 *)を使用してデータを選択しようとしています(absent = 14/06/2012 13:00:00)

これが私の質問です

$sql = "SELECT TOP 1 * FROM absent WHERE id = $id AND absent LIKE '#14/06/2012#'"
$result = odbc_exec($connect, $sql);

不在フィールドには、日付(一般日付)タイプがあります。id=AutoNumberです。

そのクエリを使用しても、結果は得られませんでした。私の間違いはどこにありますか?

すでにこれを試しています

absent = #14/06/2012#
absent = '14/06/2012*'

しかし成功ではありません。

編集 まあ、私は成功しましたが、ワイルドカードを使用していません。これが私の解決策です。範囲の日付を使用して検索を制限しています

WHERE absent >= #14/06/2012 AND absent < #15/06/2012#;

くそーさん-Access!

4

3 に答える 3

6

ODBCを介してMSAccessの日時フィールドをクエリすると、ODBCドライバーはそれをタイムスタンプに変換します。例:

select * from table where col=#2012-06-15#

これは{ts'2012-06-1500:00:00'}に変換されるため、その値がtrueの場合にのみ一致が得られます。

範囲を使用した回答の方が優れていますが、実際に使用する必要があります:-

select * from table where col>{d '2012-06-15'} and col<{d '2012-06-16'}

のODBC形式を使用する{d 'yyyy-mm-dd'}と、コードはMSAccessだけでなく他のほとんどのODBCドライバーにも移植可能になります。

于 2012-06-15T10:46:53.723 に答える
2

文字列と日付の2種類の区切り文字を含めました。MSAccessでのクエリは次のようになります。

$sql = "SELECT TOP 1 * FROM absent WHERE id = $id AND absent = #2012/06/14#"

ロケール形式とのあいまいさを回避するため、年月日形式を使用することをお勧めします。

于 2012-06-14T09:44:46.510 に答える
1

phpが利用できないため、答えを試すことはできませんが、ここにいくつかのアイデアがあります(AbsentがDateフィールドであると想定しています)。

  • LIKEは文字列の比較を行うため、LIKEを使用する場合は#を含めません。
  • 同じ理由で、引用符を含める必要があります'"そうしないと、除算が行われます。
  • これはすべて米国の製品なので、mm / dd/yyyy形式の日付を試してみます

そのため、私の推測はabsent LIKE '06/04/2012*'

その他(おそらく効率は劣りますが、より安全です)の基準は次のとおりです。

...AND day(absent) = 14 AND month(absent) = 6 AND year(absent) = 2012

また

... AND Format(Absent, "dd\/mm\/yyyy") = "14/06/2012"

幸運を

于 2012-06-14T07:35:12.307 に答える