2016-12-08 9 views
1
select C.CardNumber, C.Name, Text5, Text3 from Access.Credential C 
    left join Access.Personnel P 
    on C.Name = P.Name 
    where C.Active = 1 
    and C.Name not like '%Spare%' 
    and Text3 like 'IT%' 
    or Text5 like '%IT %' 
    order by Text5 

管理者および請負業者を含むすべてのIT担当者のクエリを作成します。Text5は従業員のタイトルで、text3はIT部門です。 私は、text3またはtext5のどちらかのタイトルの中に、それにITだけを入れたいと思っています。私はほとんどそこにいるが、私は「クレジット」と他のものを手に入れている。タイトルに「IT」を含む全従業員を照会する方法

何かを覚えておいてください。 ITは必ずしもタイトル(テキスト5)の最初のものではありません(例MGR IT)。

ご協力いただきましてありがとうございます。

答えて

4

それはあなたがこの条件を探していると思う:

where C.Active = 1 and 
     C.Name not like '%Spare%' and 
     ' ' + Text3 + ' ' like '% IT %' 

これは、テキストの最初と最後にスペースを追加し、スペースに囲まITを探します。

+0

私はあなたに 'and'、no? – scsimon

+0

@scsimon。 。 。ありがとうございました。 –

+0

ゴードン – scsimon

0

OR条件をグループ化してみてください。

Where C.Active = 1 
and C.Name not like '%Spare%' 
and (Text3 like 'IT%' or Text5 like '% IT %') 
0

LIKEを使用して文字列の途中でテキストを検索するインデックスを使用して、かなりひどく実行する可能性があることはできません。スキーマに関するガバナンスがある場合(またはそうした人と親しい場合)は、フルテキストクエリの使用を検討することができます。これには、検索可能なテーブルに全文索引を追加する必要がありますが、この種の検索が一般的であれば問題はあります。詳細については

はここを見て:フィルタと、このような技術的な説明によってhttps://msdn.microsoft.com/en-us/library/ms142571.aspx

先送りされないでください。 「通常の」文字データの場合、必要なフィルタはすでに存在しています。テーブルにインデックスを置くだけで、SQLはテキスト列を「クロール」し、テキスト内の単語から大きなインデックスを作成します。

select 
    C.CardNumber, C.Name, Text5, Text3 
from 
    Access.Credential C 
    left outer join 
    Access.Personnel P 
    on 
    C.Name = P.Name 
where 
    C.Active = 1 and 
    not contains(C.Name'Spare') and 
    (
    contains(Text3, 'IT') or 
    contains(Text5, 'IT') 
) 
order by 
    Text5 

些細な観測のカップル:

次に、クエリは次のようになります

それだテーブルがテキスト3またはText5列を含むクエリから全く明らかでありません。来る人を助けるために、参照されているすべての列にエイリアス(CまたはP)を付けることを検討するかもしれません。

andorの条件を組み合わせて使用​​すると、式の周りに括弧を使用すると、微妙な論理エラーを回避できます。私はそれらを何に変更したのですかあなたはそれを意味すると思いますが、間違っているかもしれません;-)

関連する問題