請問SQL語法 : 怎樣比較TimeStamp Field ?? |
尚未結案
|
SamSam1230
中階會員 發表:128 回覆:178 積分:65 註冊:2004-12-23 發送簡訊給我 |
|
rexchiu
中階會員 發表:14 回覆:88 積分:70 註冊:2002-03-17 發送簡訊給我 |
首先,若你的資料庫是,M$-SQL Server
那麼你就要先認識一下什麼是timestamp的資料型態.
以下擷取自SQL Server2000線上叢書
timestamp timestamp 是顯露自動產生的二位元數字的資料型別,它保證在資料庫中為唯一的。timestamp 通常用於版本戳記資料表資料列的機制。儲存大小為 8 位元組。 備註 Transact-SQL timestamp 資料型別不同於 SQL-92 標準所定義的 timestamp 資料型別。 但 SQL-92 timestamp 資料型別卻相等於 Transact-SQL datetime 資料型別。 未來版本的 Microsoft® SQL Server™ 將會修改 Transact-SQL timestamp 資料型別的功能,使其與標準定義的功能一致。 屆時,現有的 timestamp 資料型別將會被 rowversion 資料型別所取代。 Microsoft® SQL Server™ 2000 引進了 timestamp 資料型別的同義資料表 rowversion。 請盡可能在 DDL 陳述式中以 rowversion 取代 timestamp。rowversion 是歸屬於資料型別同義資料表的功能。若需詳細資訊,請參閱資料型別優先順序。 在 CREATE TABLE 或 ALTER TABLE 陳述式中,您無須對 timestamp 資料型別套用資料行名稱: CREATE TABLE ExampleTable (PriKey int PRIMARY KEY, timestamp) 如果您不套用資料行名稱,SQL Server 會產生 timestamp 的資料行名稱。 而 rowversion 資料型別同義資料表則不允許此行為。 當您指定 rowversion 時,必須套用資料行名稱。 一個資料表只可以有一個 timestamp 資料行。每次插入或更新包含 timestamp 資料行的資料列時,便會更新 timestamp 資料行中的值。此特性使 timestamp 資料行不適合作為索引鍵,尤其是作為主索引鍵。任何對資料列的更新都會變更 timestamp 值,然後變更索引鍵值。如果此資料行是在主索引鍵中,舊的索引鍵不再有效,參照舊索引鍵的外部索引鍵也不再有效。如果資料表被資料指標參照,所有的更新會變更資料指標中資料列的位置。如果資料行是在索引鍵值中,所有對此資料列的更新也會產生索引的更新。 不可設定空值的 timestamp 資料行在意義上等於 binary(8) 資料行。可設定空值的 timestamp 資料行在意義上等於 varbinary(8) 資料行。因此,從你的SQL 語法看來,你試圖去令timestamp的欄位與字串欄位做比較! 所以你必須將之轉換成timestamp.雖然你可以依賴SQL Server的implicit conversion 將之轉換,但是有時候他會轉換錯誤.所以最好是自己轉換比較安全, 除錯也比較容易. 此外,在處理日期的時候要特別注意,SQL Server是依照,所在的host上的日期形式,去做判別的.以你提供的日期,在我的電腦上轉換會出錯,原因是,我電腦上的 日期形式為 m/dd/yyyy hh:mm:ss,因此原本你的語法可以依靠 implicit conversion 自動轉換成功,而後去做比較.但我想可能你資料庫所在的電腦日期形式很可能不是你輸入的樣子.所以你可以去檢查一下. 下面提供一個自己轉換的例子, select * from A12303_01_2005 where record_timestamp=cast('1/30/2001 12:00:00' as timestamp) Best Regards, Rex Chiu
------
Best Regards, Rex Chiu |
SamSam1230
中階會員 發表:128 回覆:178 積分:65 註冊:2004-12-23 發送簡訊給我 |
請問在 delphi 我要怎樣知道我 search 的有沒有 比如說: with Query1 do
begin
close;
SQL.Clear;
DataBaseName := DataBaseModule.DB_NAME;
SQL.Text := select * from A12303_01_2005 where Record_TimeStamp=cast('1/30/2001 11:00:00' as timestamp);
Active := True;
Open;
end; 最後出來的結果我又怎樣判斷? 謝謝
|
rexchiu
中階會員 發表:14 回覆:88 積分:70 註冊:2002-03-17 發送簡訊給我 |
引言: 請問在 delphi 我要怎樣知道我 search 的有沒有 比如說: with Query1 do begin close; SQL.Clear; DataBaseName := DataBaseModule.DB_NAME; SQL.Text := select * from A12303_01_2005 where Record_TimeStamp=cast('1/30/2001 11:00:00' as timestamp); Active := True; Open; end; 最後出來的結果我又怎樣判斷? 謝謝一點建議,像這種已經跟原來主題有點偏離的問題,建議一下你開另一個問題去問 比較好 > class="code"> while not query1.eof do begin memo1.lines.add(query1.FieldByName('test').vaule);//假設 test欄位是String. //也可以這樣做. memo1.lines.add(query1.fieldByName('test').asString); //或者也可以這樣做 memo1.lines.add(query1.fieldvalue['test']); query1.next; end; 以上的code 要在你Open之後,才能加上去喔 memo1 是方便把資料秀出來,而加上去的,實務上的應用你可以放一些別的元件 如DBGrid之類的東東
------
Best Regards, Rex Chiu |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |