2016-11-15 49 views
2

我有一个包含一个病人ID列,此ID在末端诊所后缀:TSQL SELECT语句更具体的LIKE

[Client Number] 
29848393Ch 

我运行的审计脚本诊所后缀来算,这些过去它:

SELECT  COUNT(Client.[Client Number]) AS Count 
    FROM   Client where [client number] like N'%' + @suffix 

我们现在正在对已经造成的问题与查询三位数后缀。

[Client Number] 
29848393QCh 

有没有办法选择通过后缀计数,并且有它严格返回只包含Ch和不QCH结果?

+2

'where right([client number],2)='Ch''或者你可以设置一个[计算列](https://msdn.microsoft.com/en-us/library/ms188300.aspx)类似到[基于功能的索引](http://stackoverflow.com/questions/22168213/function-based-indexes-in-sql-server)并使用正确的2个字符,并由它来限制。从性能角度来看,使用2个字符右侧的计算列看起来就像是要走的路。也许一个2和一个3 ... – xQbert

+0

我认为你应该使用RIGHT()不喜欢 - 应该更快,需要我发布代码? – Hogan

+0

刚看到xQbert的评论 - 他是对的。您也可以在某些平台上为RIGHT(x,2)设置索引。 – Hogan

回答

0

你可以简单地写这样:

SELECT  COUNT(Client.[Client Number]) AS Count 
FROM   Client 
WHERE [client number] like N'%[^Q]' + @suffix 

编辑:

SELECT  COUNT(Client.[Client Number]) AS Count 
FROM   Client 
WHERE [client number] like N'%[^'+ @new_letter + ']' + @suffix 

- @ new_letter这里可能是你新加的字母。

+0

问题是有超过300个诊所后缀。我需要能够通过@suffix并让它返回一个计数。 –

+0

很酷,你能解释一下[^ Q]在做什么吗? –

+0

只是说在那个位置不是'Q' –

0

这是另一种方法。我不知道数据集的大小,但是您可以尝试两种方法并查看哪一个性能更好。

SELECT COUNT(Client.[Client Number]) AS [Count] 
FROM Client 
WHERE Client.[Client Number] LIKE '%Ch%' 
EXCEPT 
SELECT * 
FROM Client 
WHERE Client.[Client Number] LIKE '%QCh%' 

编辑:有了您更换解决方案,你可以做这样的事情是找到的第一个非数字字符,并返回你的后缀。

SUBSTRING(clientID, PATINDEX('%[a-z]%', Client.[Client Number]), LEN(Client.[Client Number])) 
0

这看起来右起第三个指数...如果它是一个数字则满足条件,如果它不是一个数字,那么它没有。因此,添加的任何数量的字符(即结尾的超过2个字符的任何字符)将不会被返回。

where substring([client number],len([client number]) - 2,1) like '[0-9]'

然后,一对与你的后缀过滤器...

where 
    substring([client number],len([client number]) - 2,1) like '[0-9]' 
    and [client number] like N'%' + @suffix 
-2

感谢所有的建议大家,可惜没有足够的灵活性,我需要寻找一个后缀不知道如果有冲突后缀加上有时我需要寻找三个字母后缀。

我决定去替换声明,我已经测试过速度,它有一个边际影响。

REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE ([client number], '0', ''),'1', ''),'2', ''),'3', ''),'4', ''),'5', ''),'6', ''),'7', ''),'8', ''),'9', '') = @suffix 

可能不是完美的解决方案,但它解决我的问题,仍然是通过任何后缀不够灵活。

+2

这太可怕了。 – Hogan