我有一个包含患者ID的列,该ID最后有诊所后缀:
[Client Number]
29848393Ch
我运行一个审核脚本,用诊所后缀来计算这些内容:
SELECT COUNT(Client.[Client Number]) AS Count
FROM Client where [client number] like N'%' + @suffix
我们现在正在转移到一个三位数的后缀,这会导致查询出现问题。
[Client Number]
29848393QCh
有没有办法选择通过后缀的计数并严格只返回包含Ch而不是QCh的结果?
答案 0 :(得分: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这里可能是你新添加的信件。
答案 1 :(得分: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]))
答案 2 :(得分: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
答案 3 :(得分:-2)
感谢大家提出的所有建议,遗憾的是没有足够的灵活性,我需要搜索后缀而不知道是否存在冲突后缀加上有时我需要寻找三个字母后缀。
我决定采用替换声明,我已经对速度进行了测试,并且它有一个边缘效应。
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE ([client number], '0', ''),'1', ''),'2', ''),'3', ''),'4', ''),'5', ''),'6', ''),'7', ''),'8', ''),'9', '') = @suffix
可能不是一个完美的解决方案,但它解决了我的问题,并且足够灵活,可以通过任何后缀。