2016-07-28 2 views
1

私がやろうとしています何の簡略化抜粋です:連結は、内部のSQL Serverで機能をCONTAINS

SELECT StreetNumber + StreetName AS 'Address' 
FROM TABLE 
WHERE CONTAINS('Address', 'Street Name') 

私は句がSELECT句の前に評価されるWHEREので、私はここにエイリアスを使用することはできませんことを実現します。

次の二つの選択肢も動作しません:

1)

SELECT Street_Number + StreetName AS 'Address' 
FROM TABLE 
WHERE CONTAINS(CONCAT(StreetNumber, '', StreetName), 'Street Name') 

2)

SELECT Street_Number + StreetName AS 'Address' 
FROM TABLE 
WHERE CONTAINS(StreetNumber + ' ' + StreetName), 'Street Name') 

どのように私はこれを達成することができますか?

+3

実際に何をしようとしていますか?あなたは 'CONTAINS'が何であるか知っていますか?私。それは全文索引関数であり、 'string.Contains'と等価ではないということですか? –

+0

アドレスは、それが次のいずれかで表示されます「123メインストリート」の場合:あなたは認識しているよう 「メイン123ストリート」 「ストリートメイン」 「ストリート123」 など – Jake

+1

ああOKが鳴ります。あなたがstring.containsセマンティクスを望んでいればもっと楽になりました! –

答えて

1

私は通常これをサブクエリで処理します。私はので、私はこのように扱うでしょう句に選択リストから連結またはROW_NUMBERの割り当てのようなコードをコピーして貼り付けることが好きではありません:

Select Address From 
(
    SELECT StreetNumber + StreetName AS 'Address' 
    FROM TABLE 
) A 
WHERE CONTAINS(Address, 'Street Name') 
-- Or maybe you really want WHERE Address Like '%Street Name%' 

私もこのコードを維持/読みやすいと思います。コメントには、フルテキストインデックスを持つ作品が含まれているので、実際にはCharindexやLikeを探している可能性があります。

+0

これは、その列の値ではなく、文字列リテラル "ストリート名"のフルテキスト検索です。 –

+0

@MartinSmithそれは良い点ですが、文字列リテラル "Street Name"の代わりになる入力パラメータの書式設定を処理するロジックがあります。 JoeCこの連結された「アドレス」列にフルテキストインデックスを作成するには、ビューを作成し、そのビューの列にフルテキストインデックスを作成してから、内部クエリ。 – Jake