2012-02-29 8 views
57

サーバーがExpress Editionを実行しているかどうかを検出しようとしています。tsqlに変数を持つStartsWithまたはContainsがありますか?

私は以下のt SQLを持っています。私の例では

DECLARE @edition varchar(50); 
set @edition = cast((select SERVERPROPERTY ('edition')) as varchar) 

print @edition 

@edition = Express Edition (64-bit)

は、私は次のことをどのように行うことができますか? (C#のインスピレーション)。

DECLARE @isExpress bit; 
set @isExpress = @edition.StartsWith('Express Edition'); 

答えて

67

StartsWithleft(@edition, 15) = 'Express Edition'またはcharindex('Express Edition', @edition) = 1
Containsleft機能使用

charindex('Express Edition', @edition) >= 1

set @isExpress = iif(left(@edition, 15) = 'Express Edition', 1, 0); 

set @isExpress = case when left(@edition, 15) = 'Express Edition' then 1 else 0 end 

またはSQL Server 2012で始まるが、あなたはiif機能を使用することができます

またはcharindex機能使用:それはあなたが望むもののように思える

set @isExpress = iif(charindex('Express Edition', @edition) = 1, 1, 0); 
64

http://msdn.microsoft.com/en-us/library/ms186323.aspxです。

それは(で始まる)になり、あなたの例では:

set @isExpress = (CharIndex('Express Edition', @edition) = 1) 

または私は

like 'Express Edition%' 

例使用することになり

set @isExpress = (CharIndex('Express Edition', @edition) >= 1) 
+2

これは受け入れられた回答としてマークする必要があります。 –

+0

LIKE 'Express Edition%'を使用してみませんか?また、 "Express Edition"が文字列のどこにあっても、あなたの解決策は真実ではありませんか?それはより具体的にはちょうど "それを行う"方法の種類が含まれています – mmcrae

+2

@ mmcrae以下のようなバージョンを使用して、これは頭に来て、OPが持っていたもののほとんどのように見えた最初の方法だった。また、最初の式は、変数が(charindexが1を返して)与えられた引数で始まる場合にのみtrueを返します。 2番目の式はcontainsです。引数が文字列のどこにあっても(charindexは1以上を返します)、trueを返します。 –

19

含まれています

DECLARE @edition varchar(50); 
set @edition = cast((select SERVERPROPERTY ('edition')) as varchar) 

DECLARE @isExpress bit 
if @edition like 'Express Edition%' 
    set @isExpress = 1; 
else 
    set @isExpress = 0; 

print @isExpress 
+0

質問を読んだ場合、質問ではありません。あなたの答えで私の例を試してみてください。 –

+0

t-sqlのif文のように使用できます。これが私が好きな理由です。なぜあなたは私にマイナス点を与えたいのか分からないが、どうしてそうではないのだろうか。 –

+0

はうまく動作します。追加の風味をありがとう。 –

関連する問題