2017-06-09 19 views
0

私はIFの条件を使用しています。SQLサーバの選択条件ケース

ですから、CASE を使用して、スクリプトを短縮したいと考えています。代わりにIFCASEWHENを使用するようにザ・スクリプト以下の変更方法

DECLARE @SDATE1 DATE='2015-01-01' 
DECLARE @EDATE1 DATE='2016-01-01' 
DECLARE @ASOF VARCHAR(10)='YES' 

IF @ASOF='YES' 

select * from customer 

ELSE 

select * from customer WHERE 
CAST(CUSTDATE AS DATE)END 
BETWEEN @SDATE1 AND @EDATE1 
+0

んが、より複雑な条件を書きません - ちょうどなし。まず、コーディング作業を最小限にしようとするのはちょうど怠惰です。これは、アスタリスクを列リストとして使用することによって証明されます。選択したアプローチはパフォーマンスの問題につながる可能性があります。また、where句の日付に列をキャストすることで、パフォーマンス上の問題が発生する可能性があります。日付で検索する方法はこちら[こちら](http://sqlblog.com/blogs/aaron_bertrand/archive/2011/10/19/what-do-between-and-the-devil-have-in-common.aspx) – SMor

答えて

0

まあ方法についてはちょうど

SELECT * 
FROM customer WHERE 
(@ASOF != 'YES' 
    AND CAST(CUSTDATE AS DATE) BETWEEN @SDATE1 AND @EDATE1) 
OR @ASOF = 'YES' 
1
DECLARE @SDATE1 DATE='2015-01-01' 
DECLARE @EDATE1 DATE='2016-01-01' 
DECLARE @ASOF VARCHAR(10)='YES' 

SELECT * 
FROM customer 
WHERE (CAST(CUSTDATE AS DATE) >= @SDATE1 AND CAST(CUSTDATE AS DATE) <= @EDATE1 AND @ASOF <> 'YES') 
    OR @ASOF='YES' 

私はまた、文法的に正しくないENDを除去し、>= <=betweenを交換しました。 betweenの潜在的な問題については、hereを参照してください。