Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使构建编号可排序_Sql Server_Tsql_Sorting - Fatal编程技术网

Sql server 使构建编号可排序

Sql server 使构建编号可排序,sql-server,tsql,sorting,Sql Server,Tsql,Sorting,我有一系列内部版本号,存储为VARCHAR: BUILDID 15.40.417 16.40.11014 17.0.667 17.0.700 17.0.703 17.0.710 17.1.137 17.1.141 17.1.142 17.1.151 17.1.167 17.1.211 17.1.87 17.1.88 17.10.12 17.20.7 17.25.3 17.25.5 17.30.1 我们发现排序时不使用前导零的问题非常普遍。我想把数字分开,然后创建一个BIGINT。有没有更好的方法

我有一系列内部版本号,存储为VARCHAR:

BUILDID 15.40.417 16.40.11014 17.0.667 17.0.700 17.0.703 17.0.710 17.1.137 17.1.141 17.1.142 17.1.151 17.1.167 17.1.211 17.1.87 17.1.88 17.10.12 17.20.7 17.25.3 17.25.5 17.30.1


我们发现排序时不使用前导零的问题非常普遍。我想把数字分开,然后创建一个BIGINT。有没有更好的方法对这些文件进行排序?

我最终实现了以下功能:

-- =============================================
-- Author:      Dan Andrews
-- Create date: 4/19/2017
-- Description: Converts Build IDs (17.20.1) to INTs (17020001)
-- =============================================
ALTER FUNCTION fn_BuildID2INT(@buildID VARCHAR(50))
RETURNS BIGINT
AS
BEGIN
  DECLARE
    @xml   XML
  , @value BIGINT = 10000000000
  , @total BIGINT = 0;
  SET @xml = CAST('<X>'+REPLACE(@buildID , '.' , '</X><X>')+'</X>' AS XML);
  SELECT
    @total+=C.value('.' , 'int')*@value
  , @value/=100000
  FROM
    @xml.nodes('X') AS X(C);
  RETURN @total;
END;
GO
GRANT EXECUTE ON fn_BuildID2INT TO public;
这给了我这个:

瓦尔 150004000417 160004011014 170000000667 170000000700 170000000703 170000000710 170000100137 170000100141 170000100142 170000100151 170000100167 170000100211 170000100087 170000100088 170001000012 170002000007 170002500003 170002500005 170003000001


但是。。。as,按“/”+YourColumn+“/”转换为HIERARCHYID的顺序更好。

假设这很像一个标准版本号,256*256*256*左数+256*256*中间数+右数将为您提供一个32位整数。就这样吧。