Sql-Server

在 LIKE 運算符中選擇多個值

  • November 29, 2021

我有一個下面給出的 SQL 查詢,我想使用like運算符選擇多個值。

我的查詢正確嗎?

SELECT top 1 employee_id, employee_ident, utc_dt, rx_dt 
FROM       employee
INNER JOIN employee_mdata_history 
ON         employee.ident=employee_mdata_history.employee_ident 
WHERE      employee_id like 'emp1%' , 'emp3%' 
ORDER BY   rx_dt desc

如果沒有,有人可以糾正我嗎?

我的表有大量以'emp1'and開頭的數據'emp3'。我可以根據前 3 個“emp1”和前 2 個“emp3”過濾結果rx_dt嗎?

或者,您可以嘗試以下方法:

SELECT
 x.*
FROM
 (
   VALUES
     ('emp1%', 3),
     ('emp3%', 2)
 ) AS v (pattern, row_count)
 CROSS APPLY
 (  -- your query
   SELECT top (v.row_count)
              employee_id, employee_ident, utc_dt, rx_dt 
   FROM       employee
   INNER JOIN employee_mdata_history
   ON         employee.ident=employee_mdata_history.employee_ident 
   WHERE      employee_id like v.pattern
   ORDER BY   rx_dt desc
 ) AS x
;

行建構子將VALUES您的模式列表表示為一個表格,另外為每個模式提供要為該模式檢索的行數。CROSS APPLY 運算符將您的查詢應用於模式列表的每一行,即每個模式,將每個模式的行數限制為模式列表中的相應值。

作為旁注,請讓我藉此機會建議您始終使用從兩個或多個表讀取的查詢中的表別名來限定列。這使您的查詢更易於閱讀/理解。您始終可以使用短別名來避免重複可能很長的表名。例如:

SELECT TOP (1)
 e.employee_id,
 h.employee_ident,
 ...
FROM
 dbo.employee AS e
 INNER JOIN dbo.employee_mdata_history AS h
   ON e.ident = h.employee_ident
WHERE
 e.employee_id LIKE ...
ORDER BY
 ...

引用自:https://dba.stackexchange.com/questions/170579