我想写一个select语句,它应该根据通配符过滤数据。我写过类似的东西,但它不符合我的目的:
Select r.CompanyID,r.Description,c.BusinessUnitID,c.BusinessSourceID as BusinessSrcID,
c.Description as BusinessDesc from RCompanyTable r
join CBusinessUnitTable c on r.CompanyID=c.CompanyID
WHERE r.CompanyID like CASE WHEN COALESCE('Regexp(*)', '') = '' THEN r.CompanyID ELSE 'Company2' END
但在此,它总是执行else部分。 我正在寻找的是它应该在我通过*条件时给我所有数据。 因为在我的RCompanyTable中我有两个记录Company1和Company2,我希望如果我在该查询中传递*然后它应该返回我的company1和company2数据但是如果我传递regexp(any1)它应该提供我Comapany1数据和两个条件不是真的那么它应该转到显示Company2数据的其他部分 期待您的回答。 提前致谢
答案 0 :(得分:0)
WHERE r.CompanyID = CASE WHEN r.CompanyId LIKE '%*%' THEN r.CompanyID ELSE 'Company2' END
此where子句返回companyID
中包含*,或companyID
为Company2的所有记录。这就是你要追求的吗?
答案 1 :(得分:0)
我不确切地知道您对*
和regexp(any1)
的要求,但假设它们是常量字符串,那么此查询应该有效:
SET @parameter = '';
Select r.CompanyID
, r.Description
, c.BusinessUnitID
, c.BusinessSourceID AS BusinessSrcID
, c.Description AS BusinessDesc
FROM RCompanyTable r
JOIN CBusinessUnitTable c ON r.CompanyID = c.CompanyID
WHERE (@parameter LIKE '%*%' AND r.CompanyID IN ('Company1', 'Company2'))
OR (@parameter LIKE 'regexp(any1)' AND r.CompanyID = 'Company1')
OR (@parameter NOT IN ('%*%', 'regexp(any1)') AND r.CompanyID = 'Company2')
@parameter
是您要在查询中传递的内容。