pav*_*red 4 sql sql-server case where-clause
我需要查询一些数据。这是我构建的查询,但对我来说不起作用。对于此示例,我正在使用AdventureWorks数据库。
SELECT * FROM [Purchasing].[Vendor] WHERE PurchasingWebServiceURL LIKE
case
// In this case I need all rows to be returned if @url is '' or 'ALL' or NULL
when (@url IS null OR @url = '' OR @url = 'ALL') then ('''%'' AND PurchasingWebServiceURL IS NULL')
//I need all records which are blank here including nulls
when (@url = 'blank') then (''''' AND PurchasingWebServiceURL IS NULL' )
//n this condition I need all record which are not like a particular value
when (@url = 'fail') then ('''%'' AND PurchasingWebServiceURL NOT LIKE ''%treyresearch%''' )
//Else Match the records which are `LIKE` the input value
else '%' + @url + '%'
end
Run Code Online (Sandbox Code Playgroud)
这对我不起作用。如何THEN在相同的中有多个where条件子句CASE?我该如何进行这项工作?
这不是剪切和粘贴。该CASE表达式必须返回一个值,并且您正在返回一个包含SQL的字符串(从技术上来说,这是一个值,但类型错误)。我想这是您要写的:
SELECT * FROM [Purchasing].[Vendor] WHERE
CASE
WHEN @url IS null OR @url = '' OR @url = 'ALL'
THEN PurchasingWebServiceURL LIKE '%'
WHEN @url = 'blank'
THEN PurchasingWebServiceURL = ''
WHEN @url = 'fail'
THEN PurchasingWebServiceURL NOT LIKE '%treyresearch%'
ELSE PurchasingWebServiceURL = '%' + @url + '%'
END
Run Code Online (Sandbox Code Playgroud)
我还怀疑这可能在某些方言中不起作用,但由于没有布尔值,所以现在无法测试(Oracle,我在看着您)。
但是,由于@url不依赖于表值,为什么不进行三个不同的查询,并根据您的参数选择要评估的值?