SQL - 选择类似字符串

时间:2014-01-04 04:22:46

标签: sql sql-server sql-server-2005

我有下表:

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。

2 个答案:

答案 0 :(得分:2)

select top 1 partnumber
from tbl
where partnumber like '003A-I[0-9]%'
order by partnumber desc

SQLFiddle

更新(回应@ 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

SQLFiddle

上的链接