簡體   English   中英

通過First_Name和/或Last_Name查詢sql表

[英]query sql table By First_Name and/or Last_Name

我需要編寫一個查詢,查詢基於first_name和/或last_name的客戶表。 在我的查詢中,例如當我使用firstname = Ann運行時,它會帶上所有具有該名字的客戶,當我使用lastname = sam運行時,它將帶上所有姓氏的所有客戶,但是當我使用'Ann'運行時,會使用'Sam'僅帶來一個與之匹配的記錄,它帶所有姓安或姓氏相同的山姆,因此帶來了多個記錄。

 select * from customer
where WHERE  --(CONVERT(varchar(50),decryptbykey([Account_Number]))=                     
  @UserName or ce.Email= @UserName or Username=@UserName )
  ((CONVERT(varchar(50),decryptbykey([First_Name]))) =@First_Name) 
  and (CONVERT(varchar(50),decryptbykey([Last_Name])) =@Last_Name) 
  or  ((CONVERT(varchar(50),decryptbykey([First_Name]))) =@First_Name) 
 or (CONVERT(varchar(50),decryptbykey([Last_Name])) =@Last_Name) 

在這種情況下,我會將每個參數都視為可選參數。 如果提供,則強制執行條件,否則跳過該檢查。 在不必維護n的意義上,這種查詢很方便。 版本的查詢,但是我必須警告您,這很容易導致錯誤的緩存查詢計划。

如果遇到無法解釋的嚴重減速,則可能需要在查詢末尾加上“ OPTION(RECOMPILE)”。 通常,這似乎是個壞主意,但我寧願SQL Server每個查詢多花5毫秒而不是30秒一次。 鎖,數據庫負載,用戶體驗等。通常,強制查詢選項通常不是一個好主意,只有在沒有其他合理的解決方案時才應這樣做。

IF (@UserName_Name = '')
    SET @First_Name = NULL;
IF (@First_Name = '')
    SET @First_Name = NULL;
IF (@Last_Name = '')
    SET @First_Name = NULL;

select *
from customer
where (@UserName IS NULL
        OR Username = @UserName
        OR Email = @UserName
        OR CONVERT(varchar(50), decryptbykey([Account_Number])) = @UserName)
    AND (@First_Name IS NULL OR CONVERT(varchar(50), decryptbykey([First_Name])) = @First_Name)
    AND (@Last_Name IS NULL OR CONVERT(varchar(50), decryptbykey([First_Name])) = @Last_Name);

這可能並不漂亮,但可以按照您的描述進行操作。

如果在“姓氏”和“姓氏”上都完全匹配,則只返回完全匹配(盡管可能不止一個)。 如果僅在“名字”或“姓氏”上匹配,則返回所有匹配的記錄

SELECT * FROM customer 
WHERE 
(
  (First_name = (CASE WHEN (First_name = @First_Name AND Last_name = @Last_Name) THEN @First_Name END)) 
  AND
  (Last_name = (CASE WHEN (First_name = @First_Name AND Last_name = @Last_Name) THEN @Last_Name END))
)
OR 
(
  (First_name = (CASE WHEN (First_name = @First_Name AND Last_name <> @Last_Name) THEN @First_Name END)) 
  OR 
  (Last_name = (CASE WHEN (First_name <> @First_Name AND Last_name = @Last_Name) THEN @Last_Name END))
)

您必須添加其他過濾器並自己轉換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM