查找两个字母数字值之间的字母数字值



我有以下数据:

create table #temp (SortValue varchar(100))
insert into #temp
values
('511111'),
('211'),
('HPA19'),
('IPA-255'),
('IPA-223'),
('HPA19GA')

我只想找到HPA11和HPA3237之间的值。

如果我尝试:

select *
from #temp
where sortvalue between 'hpa11' and 'hpa3237'

我收到结果:

HPA19,
HPA19GA

然而,我正试图找到一种方法让HPA19GA不出现在我的结果中。我(认为)我理解为什么SQL在HPA11和HPA3237之间返回这个结果。然而,在我的数据集中,我知道只有HPA11到HPA3237,我需要知道HPA19GA是无效的,并且不落在我的min/max值之间。

我已经试过了:

select *
from #temp
where right('0000000000' + sortvalue, 10)
between '00000hpa11' and '0000hpa237'

这个回报511111年,HPA19

I also tried:
select *
from #temp
where  SUBSTRING (sortvalue, PATINDEX ('% [0-9]%',sortvalue), LEN (sortvalue))
between 'HPA11' and 'HPA3237'

它返回:

HPA19GA

我也试过:

select *
from #temp
where left(concat(sortvalue, '0000000000'), 10)
between 'HPA1100000' and 'HPA3237000'

它返回:

HPA19,
HPA19GA

如果有人有好主意,我很想看看有人能想出什么来!

IIUC,您需要将string部分(HGA)与数字部分分开。给定您的示例数据,我相信这实现了您的解决方案:

SELECT *
FROM #temp
WHERE 
LEFT(SortValue, 3) = 'HPA' -- only consider values starting with HPA
AND TRY_CAST(SUBSTRING(SortValue, 4, LEN(SortValue)-3) AS INT) BETWEEN 11 AND 3237

最新更新