日期:2014-05-17  浏览次数:20500 次

如何查出最大的文件号的数字部分?
表名 documentfile
字段名 filenumber 该字段中有如下数据,如何用sql语句查出以下数据中的最大数字“2018”呢?

工会第3号文件
工会第2018号文件
工会第544号文件
工会第29号文件
工会第172号文件
工会第63号文件


------解决方案--------------------
----------------------------
-- Author  :TravyLee(物是人非事事休,欲语泪先流!)
-- Date    :2012-12-03 16:30:03
-- Version:

--      Microsoft SQL Server 2012 - 11.0.2100.60 (Intel X86) 

-- Feb 10 2012 19:13:17 

-- Copyright (c) Microsoft Corporation

-- Enterprise Edition: Core-based Licensing on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)

--
----------------------------
--> 测试数据:[test]
if object_id('[test]') is not null 
drop table [test]
go 
create table [test]([col] varchar(16))
insert [test]
select '工会第3号文件' union all
select '工会第2018号文件' union all
select '工会第544号文件' union all
select '工会第29号文件' union all
select '工会第172号文件' union all
select '工会第63号文件'

go

;with t
as(
select substring(col+' ',patindex( '%[0-9]% ',col+' '),len(col+' ')) as col1 
from test
)
select max(cast(left(col1+' ',patindex( '%[^0-9]% ',col1+' ')-1) as int)) as col from t

/*
col
-----------
2018

(1 行受影响)
*/



------解决方案--------------------
--CREATE TABLE [test] ( [col] VARCHAR(16) )
--INSERT  [test]
--        SELECT  '工会第3号文件'
--        UNION ALL
--        SELECT  '工会第2018号文件'
--        UNION ALL
--        SELECT  '工会第544号文件'
--        UNION ALL
--        SELECT  '工会第29号文件'
--        UNION ALL
--        SELECT  '工会第172号文件'
--        UNION ALL
--        SELECT  '工会第63号文件'
        
        
        
SELECT  MAX(CONVERT(INT, SUBSTRING([col], 4,
                                   PATINDEX('%[^0-9]%',
                                            SUBSTRING([col], 4, LEN(col))) - 1)))
FROM    [test]
/*
-----------
2018

(1 行受影响)
*/