2017-07-05 62 views
0
--where '[email protected]' in(o.SuOrderEmailAddress, o.SuBusEmailAddress, o.SuReturnEmail, O.SuPartsEmail) and es.ictid = 7 

我想搜索多個列中的一個變量(電子郵件地址)。這就是我現在所擁有的,而且是有效的。SQL使用Like,一個變量,多列

我想我需要使用Like,因爲我想使用通配符。例如,能夠使用*@aol.com會非常有幫助。現在我必須輸入一個確切的電子郵件地址。

--Where s.suname like 'rizt%'and es.ictid = 7 

正是在這個上面的例子很簡單,但一旦我重新安排的語法做多列林丟失的地方,我可以用像這樣我可以使用通配符。

謝謝

+1

您使用的數據庫是? –

+0

這可能聽起來很愚蠢,因爲我是新手,但你怎麼知道? – Tyler

回答

0

你可以看看電子郵件地址的末尾。大多數的數據庫都支持right()功能:

where '@aol.com' in (right(o.SuOrderEmailAddress, 8), 
        right(o.SuBusEmailAddress, 8), 
        right(o.SuReturnEmail, 8), 
        right(o.SuPartsEmail, 8) 
        ) and 
     es.ictid = 7 

(沒有right()具有同等功能,在一般甚至數據庫。)

有些數據庫支持正則表達式,這是另一種選擇。或者,在你的情況下,字符串連接甚至可以工作。

編輯:

如果你有一個變量,你可以這樣做:

where @var in (right(o.SuOrderEmailAddress, len(@var)), 
       right(o.SuBusEmailAddress, len(@var)), 
       right(o.SuReturnEmail, len(@var)), 
       right(o.SuPartsEmail, len(@var)) 
      ) and 
     es.ictid = 7 
+0

這在很多情況下都能正常工作,但在使用更常見的電子郵件的情況下,比如aol,我會得到太多的結果。 基本上我需要確定一個特定的員工分配到與各種電子郵件聯繫人一起工作,所以在沒有具體的公司名稱的情況下,這將是有問題的 – Tyler

+0

其實,我越看越是越可行。我假設8表示它正在看多少個角色?有沒有辦法改變這種情況,而不需要輸入特定的號碼?就像我可以完全刪除字符限制,還是有辦法在那裏放置某種變量? *或%或什麼的? – Tyler

0

我認爲,真正的答案是使用全文索引(如果使用的是MS SQL - 否則看是否有一個相當於你使用的任何服務器)。然而,這裏是一個醜陋的黑客應該工作:

WHERE ISNULL(o.SuOrderEmailAddress, '') + '|' 
     + ISNULL(o.SuBusEmailAddress, '') + '|' 
     + ISNULL(o.SuReturnEmail, '') + '|' 
     + ISNULL(O.SuPartsEmail, '') LIKE @pattern 

這只是所有串接相關領域進入管道分隔列表檢查的@pattern是連接字符串之前。

+0

對此我很新,所以'|'表明?。我試過使用它,它運行沒有錯誤,但我沒有得到結果 – Tyler

+0

你將不得不檢查每個null。 – JBrooks

+0

@JBrooks是的,好點,我會編輯。 –

0

這是一般的想法。通常,@搜索將是一個存儲過程的參數。首先查看WHERE子句。

declare @search varchar(50) = '@aol.com' 

    set @search = '%' + @search + '%' 

    select case when o.SuOrderEmailAddress like @search then o.SuOrderEmailAddress 
       when o.SuBusEmailAddress like @search then o.SuBusEmailAddress 
       when o.SuReturnEmail like @search then o.SuReturnEmail 
       when o.SuPartsEmail like @search end as matchedEmail  
    from MyTable as o 
    where (o.SuOrderEmailAddress like @search 
      or o.SuBusEmailAddress like @search 
      or o.SuReturnEmail like @search 
      or o.SuPartsEmail like @search) and ... 

您可以控制在前端添加'%'。在我看來,這對於讀者來說已經寫得很清楚,並且可以讓你回覆那場比賽的電子郵件地址。