2012-06-14 140 views
0

誰能告訴我如何使用PHP在MS.ACCESS數據庫中按日期選擇數據? 我想選擇的示例數據(沒有= 2012/6/14 13:00:00)使用通配符(缺席= 14/06/2012 *)通過odbc數據庫中的DATE查詢選擇數據

這裏是我的查詢

$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#; 

該死的你Ms-Access!

+1

缺席是DATE格式? –

+0

@ElzoValugi是缺席是DATE格式,我的問題,如何使用通配符按日期選擇數據與PHP?你可以幫我嗎?我卡住了,已經嘗試了所有的可能性。 – yudayyy

+1

當日<= 12時,您將遇到問題。然後訪問會將日視爲月。嘗試一下。在MS Access中,您可以在兩者之間使用。所以'#2012/06/14#和#2012/06/15#之間沒有# – Fionnuala

回答

1

我不能嘗試我的答案,因爲我沒有PHP可用,但這裏有幾個想法 (假設缺席是一個日期字段)。

  • 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" 

好運

2

您已經包括兩種類型的分隔符,字符串和日期。在MS Access中的查詢將是:

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

最好使用年份日格式,因爲它避免了語言環境格式的任何矛盾。

+0

+1,我從來不知道那個技巧 –

4

當您通過ODBC在MS Access查詢時間字段的ODBC驅動程序將其轉換爲例如時間戳:

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

這是轉換成{TS「2012-06-15 00:00:00 '}所以你只會在這個值爲真的情況下得到一個匹配。

你的使用範圍答案是更好的,但是你真的應該使用: -

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

使用的{d 'yyyy-mm-dd'}的ODBC格式將意味着你的代碼將被移植到大多數其他的ODBC驅動程序不只是MS訪問。

+0

我在查詢一個dbase III文件並使用{d'yyyy-mm-dd '}適合我。嘗試#yyyy-mm-dd#會產生一條錯誤消息,指出我缺少操作數。 –

+0

這個小珍聞:{d'2012-06-15'} << gold。謝謝。查找關於ODBC怪癖的信息是一個有點挑戰性的問題,經過大量搜索後,這個問題解決了我的問題。 –