我有下表:
create table #tbl
(
PartNumber varchar(20)
)
insert into #tbl values ('003A-I00-1')
insert into #tbl values ('003A-INT-1')
insert into #tbl values ('003A-I1')
insert into #tbl values ('003A-I2')
insert into #tbl values ('003A-I3')
我需要选择最高PartNumber ,其中PartNumber等于 003A-I ,后面只有数字(或数字)。换句话说,我需要 003A-I3 。
我尝试了什么:
select top 1 partnumber
from #tbl
where partnumber like '003A-I%' + '%[0-9]'
order by partnumber desc
但它不起作用。它返回 003A-INT-1 。我需要 003A-I3 。
我正在使用MS SQL Server 2005。
答案 0 :(得分:2)
select top 1 partnumber
from tbl
where partnumber like '003A-I[0-9]%'
order by partnumber desc
更新(回应@ Nicarus的评论:
SELECT top 1 partnumber
FROM tbl
WHERE partnumber LIKE '003A-I[0-9]%'
ORDER BY convert(varbinary(200), partnumber) DESC
答案 1 :(得分:-1)
如果要获取数值,可以使用SQL的ISNUMERIC()
函数
代码将是:
select * from #tbl
where isnumeric(replace(partnumber, '003A-I', '')) = 1
order by partnumber desc
的 REVISE:强> 的
ISNUMERIC()
函数返回布尔值true或false(1或0)。
REPLACE()
函数替换表达式或字符串中的某个模式
了解更多信息:
http://technet.microsoft.com/en-us/library/ms186862.aspx
http://technet.microsoft.com/en-us/library/ms186272.aspx
更新(2): 如果您不想匹配特定单词,可以使用以下内容,但只要您知道要替换的文本大小
select top 1 * from #tbl
where isnumeric(substring(partnumber, 7, LEN(partnumber))) = 1
order by partnumber desc
上的链接