全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:942
推到 Plurk!
推到 Facebook!

sql如何使小於今天的欄位設成null?

尚未結案
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-27 15:48:24 IP:210.61.xxx.xxx 未訂閱
select IsDate(OrderDate) as IsOrder,OrderDate from OrderDetail 結果
IsOrder OrderDate
0       NULL
1       20040327
1       20040531
我想使第二筆日期為20040327(小於目前20040527)這一筆的OrderDate為NULL, 我不知道在select裡要如何下? 請前輩提示, 謝謝!
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-05-27 16:31:40 IP:210.65.xxx.xxx 未訂閱
Hi pedro,    SQL Server :
SELECT  ISDATE(ORDERDATE) AS ISORDER,
        ORDERDATE, 
        NEWFIELDNAME = CASE
        WHEN ORDERDATE - FLOOR(CAST(GETDATE() AS FLOAT)) >= 0 THEN ORDERDATE 
        ELSE NULL
        END
FROM    ORDERDETAIL 
---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-05-27 17:32:52 IP:210.61.xxx.xxx 未訂閱
謝謝Fishman大大的回覆 這段語法很妙, 幾乎可以達到功能, 不過
SELECT  ISDATE(ORDERDATE) AS ISORDER,
        ORDERDATE, 
        NEWFIELDNAME = CASE
        WHEN ORDERDATE - FLOOR(CAST(GETDATE() AS FLOAT)) >= 0 THEN ORDERDATE 
        ELSE NULL
        END
FROM    ORDERDETAIL    select Cast(GetDate() as float)  --值為38132.728
select Cast('20040505' as float) --值為20040505.0
第三個select 為我的OrderDate格式, 二式相減大於0 實際是20040505那一筆應為null 我想應該只是小小的錯誤, 我想看看, 若您方便再提示如何? 謝謝
Analyst
一般會員


發表:0
回覆:1
積分:0
註冊:2003-09-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-05-27 18:30:52 IP:211.21.xxx.xxx 未訂閱
不知道改成底下的SQL語法,是不是你要的. SELECT  ISDATE(ORDERDATE) AS ISORDER,         ORDERDATE,          NEWFIELDNAME = CASE WHEN OrderDate<>'NULL' And ORDERDATE >= Convert(VarChar(8),GETDATE(),112) THEN ORDERDATE ELSE 'NULL' END FROM ORDERDETAIL
peipei36
一般會員


發表:8
回覆:51
積分:16
註冊:2002-03-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-05-27 23:42:11 IP:220.137.xxx.xxx 未訂閱
看起來您的日期像是字串 是否您要的是像這樣
select convert(char(8),getdate(),112)
結果為 '20040527'
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-05-28 09:19:09 IP:210.65.xxx.xxx 未訂閱
Hi pedro,    看來就如 peipei36 大大所言,您的 OrderDate 欄位格式是字串 你可以使用 Analyst 大大的語法即可    只要使用 Case 搭配 Cast 或 Convert 指令,將 GetDate() 與 OrderDate 轉換成可以比較的相同格式,就可以啦,至於詳細用法,看看 SQL Server 上的 Help,我也是從上面學來的     ---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-05-28 09:30:08 IP:210.61.xxx.xxx 未訂閱
感謝Fishman前輩, 經小弟早上試了一下

        NewDate = CASE
        WHEN Cast(OrderDate as datetime) - Floor(Cast(GetDate() AS float)) >= 0 THEN 
        OrderDate
        ELSE 
        Null
        END    
如此轉型, 輸出結果就是我要的. 也同時謝謝Analyst,peipei36大大
系統時間:2024-09-29 8:36:56
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!