台灣最大程式設計社群網站
線上人數
830
 
會員總數:244532
討論主題:188692
歡迎您免費加入會員
討論區列表 >> MS SQL >> SQL Where 有條件判斷欄位該如何撰寫語法?
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
SQL Where 有條件判斷欄位該如何撰寫語法?
價值 : 50 QP  點閱數:83 回應數:1

樓主

pkko
門外漢
0 18
356 39
發送站內信

各位大大好
想請教一下,下面的問題該如何處理

select id from database1 where (協商交期 是日期就用他為判斷條件,協商交期空白則以正常交期為判斷條件,以前面的交期欄位between between adate and bdate)
請問有這種Where 不一定是某一個欄位的時候該如何撰寫SQL語法?


搜尋相關Tags的文章: [ SQL ] , [ WHERE ] ,
本篇文章發表於2019-06-13 09:43
== 簽名檔 ==
努力!努力!再努力!!!
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
最有價值解答

小發
檢舉此回應
你的意思是這樣嗎? 如果在欄位做條件的話,不符合查詢最佳化的規則,通常會很慢啦...

create table #temp(Tid INT identity(1,1) , ExecTime datetime , NotifyTime datetime)

insert into #temp (ExecTime , NotifyTime) select '2019-06-01' , '2019-06-03'
insert into #temp (ExecTime , NotifyTime) select null , '2019-06-05 12:00'
insert into #temp (ExecTime , NotifyTime) select '2019-06-07' , '2019-06-08'
insert into #temp (ExecTime , NotifyTime) select '2019-06-08' , null
insert into #temp (ExecTime , NotifyTime) select '2019-06-11' , null

select *
from #temp

select *
from #temp
where (case when ExecTime is null then NotifyTime else exectime end) between '2019-06-01' and '2019-06-06'

select *
from (
select Tid , NotifyTime as TransTime
from #temp
where ExecTime is null and NotifyTime is not null
union all
select Tid , ExecTime
from #temp
where ExecTime is not null
) as a
where TransTime between '2019-06-01' and '2019-06-06'

drop table #temp

本篇文章回覆於2019-06-13 10:19
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.