假设有SQL Server和已知的最大部件数,这是一个用户定义的函数,与的功能相同
parsename,但可以在任意数量的部件上使用:
Create Function dbo.VersionNthPart(@version as nvarchar(max), @part as int) returns int asBegin Declare @ret as int = null, @start as int = 1, @end as int = 0, @partsFound as int = 0 if @version is not null Begin Set @ret = 0 while @partsFound < @part Begin Set @end = charindex('.', @version, @start) If @end = 0 Set @partsFound = @part -- bail early else Begin Set @partsFound = @partsFound + 1 If @partsFound = @part Set @ret = Convert(int, substring(@version, @start, @end - @start)) Else Set @start = @end + 1 End End End return @retEnd用法示例:
With tmpAs ( Select '1.0.0.5' As Version Union All Select '1.5.0.06' Union All Select '1.0.0.06' Union All Select '2.0.0.0' Union All Select '2.0.1.1' Union All Select '15.5.568' Union All Select '15.0.0.0' Union All Select '15.15.1323.22' Union All Select '15.15.622.55')Select *From tmpOrder By dbo.VersionNthPart(Version, 1), dbo.VersionNthPart(Version, 2), dbo.VersionNthPart(Version, 3), dbo.VersionNthPart(Version, 4)
http://sqlfiddle.com/#!3/e942b/3



