sql問題 |
尚未結案
|
zhuna
一般會員 發表:26 回覆:39 積分:13 註冊:2003-05-19 發送簡訊給我 |
update tempatd set factgo=(
select max(atd15010.recdatetime) from atd15010
where tempatd.cardno=atd15010.cardno and atd15010.readok=0 and atd15010.recdatetime is not null and tempatd.factgo is null and
atd15010.recdatetime between tempatd.mustgo- 1.001/24*@readarea and tempatd.mustgo 1.001/24*@readarea )
where itemtime=1 and workno>=@sworkno and workno<=@eworkno
我在storeprocedure中執行此語句會出現
Syntax error converting datetime from character string.
的錯誤.
recdatetime 是char型態,factgo是datetime型態
請幫忙查一下是什麼原因? 互相幫助,共同進步
------
互相幫助,共同進步 |
pksimo
一般會員 發表:0 回覆:1 積分:0 註冊:2003-05-27 發送簡訊給我 |
|
zhuna
一般會員 發表:26 回覆:39 積分:13 註冊:2003-05-19 發送簡訊給我 |
引言: 應該是日期條件的問題 tempatd.factgo is null 資料庫的日期應該是沒有 null 值吧 不是1899-12-30 就是 當日值 所以這樣查詢會有錯吧 你可以先測一下 select * from tempatd where factgo=-2 及 select * from tempatd where factgo<>-2 你就會明白在Sql server中日期型字段是可以為null值的,我測試的好像是在最後的between條件那里有錯誤,但我不知道是為什麼? 互相幫助,共同進步
------
互相幫助,共同進步 |
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
|
zhuna
一般會員 發表:26 回覆:39 積分:13 註冊:2003-05-19 發送簡訊給我 |
引言: 那就這樣下好了.. 利用 convert(float, xxx) 的方式先轉型為浮點數 and convert(float, atd15010.recdatetime) between convert(float, tempatd.mustgo- 1.001/24 * @readarea) and convert(float, tempatd.mustgo 1.001/24 * @readarea)你可能搞錯了,recdatetime的資料格式是這樣的'yyyy/mm/dd hh:mm:ss' 不清楚你為什麼要轉成float格式,而且也不能轉成float格式的. 互相幫助,共同進步
------
互相幫助,共同進步 |
zhuna
一般會員 發表:26 回覆:39 積分:13 註冊:2003-05-19 發送簡訊給我 |
引言:我現在把factgo變成字符型態就可以了.但我還是想知道為會麼用datetime型態就會有錯誤呢? 互相幫助,共同進步引言: 那就這樣下好了.. 利用 convert(float, xxx) 的方式先轉型為浮點數 and convert(float, atd15010.recdatetime) between convert(float, tempatd.mustgo- 1.001/24 * @readarea) and convert(float, tempatd.mustgo 1.001/24 * @readarea)你可能搞錯了,recdatetime的資料格式是這樣的'yyyy/mm/dd hh:mm:ss' 不清楚你為什麼要轉成float格式,而且也不能轉成float格式的. 互相幫助,共同進步
------
互相幫助,共同進步 |
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
|
zhuna
一般會員 發表:26 回覆:39 積分:13 註冊:2003-05-19 發送簡訊給我 |
引言:char型態也可以是'yyyy/mm/dd hh:mm:ss'格式的,而且字符型態的日期可以直接和日期型態的日期相比較.你可以在sql的查詢分析器里試一下. 互相幫助,共同進步引言: 你可能搞錯了,recdatetime的資料格式是這樣的'yyyy/mm/dd hh:mm:ss' 不清楚你為什麼要轉成float格式,而且也不能轉成float格式的.你的第一篇不是寫 recdatetime 是char型態,factgo是datetime型態 嗎?? 記得在比對不同資料格式 (datatype) 時要先轉換即可!!
------
互相幫助,共同進步 |
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
引言: char型態也可以是'yyyy/mm/dd hh:mm:ss'格式的,而且字符型態的日期可以直接和日期型態的日期相比較.你可以在sql的查詢分析器里試一下.ok. 那這樣我知道了. 不過為什麼要開成這樣的格式呢. 既然是 yyyy/mm/dd hh:mm:ss 這樣的話就開 datetime 反而所需的 datatype siez 小得多 (原 char (19) , 而 datetime 只要 (8) 就可以了! 然而你所謂的 字符型態的日期可以直接和日期型態的日期相比較 是不理想的, 因為由系統的隱性轉型常會發生一些不可預期的問題, 不如自行轉型來得有保障, 所以要如何比對, 就看你的需求了. 至於我為什麼要轉型為 float 的原因是因為 datetime 的個位數為 日 (day), 看你的 sql command 傳入的 @readarea 資料應為小時(hour) 吧, 所以建議你用 float 來進行處理比較理想, 但是現在你的 recdatetime 是 char 的型態的話, 就不建議你這樣做了. 應再配合 dateadd 來使用比較好, 建議修改為: and convert(datetime, atd15010.recdatetime) between dateadd(hh, -@readarea, tempatd.mustgo) and dateadd(hh, @readarea, tempatd.mustgo) |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |