Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.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进行排序_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

使用SQL进行排序

使用SQL进行排序,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我是SQL Server的新手。因此,我需要对以下数据进行排序 1, 1AB, 1AA, 20, 3C, 4D 进入 1, 1AA, 1AB, 3C, 4D, 20. 我的编码是 IF EXISTS ( SELECT name FROM sysobjects WHERE name = 'getIntPortion') DROP FUNCTION getIntPortion GO CREATE FUNCTION dbo.getIntPortion ( @inputVarchar v

我是SQL Server的新手。因此,我需要对以下数据进行排序

1, 1AB, 1AA, 20, 3C, 4D 
进入

1, 1AA, 1AB, 3C, 4D, 20.
我的编码是

IF EXISTS ( SELECT name FROM sysobjects WHERE name = 'getIntPortion')
 DROP FUNCTION getIntPortion
GO    
CREATE FUNCTION dbo.getIntPortion ( @inputVarchar varchar(255))
RETURNS VARCHAR(255)
AS
BEGIN
 WHILE(PATINDEX('%[^0-9]%', @inputVarchar) ) > 0
 BEGIN
 --then remove that one character, then continue
 SET @inputVarchar = REPLACE(@inputVarchar
 , SUBSTRING(@inputVarchar, PATINDEX('%[^0-9]%', @inputVarchar), 1)
 , '')
 END
 RETURN @inputVarchar
END

SELECT km_ph_act_chapt_no FROM [KM_DB].[dbo].[km_ph_act_chapters]
ORDER BY CONVERT(INT, dbo.getIntPortion(km_ph_act_chapt_no))
因为这个Alpha不是有序的。。。希望等待答复

感谢和问候


Asker

假设您的功能正常工作,将顺序更改为

SELECT km_ph_act_chapt_no FROM [KM_DB].[dbo].[km_ph_act_chapters] 
ORDER BY CONVERT(INT, dbo.getIntPortion(km_ph_act_chapt_no)) ,
   km_ph_act_chapt_no

假设功能正常工作,将顺序更改为

SELECT km_ph_act_chapt_no FROM [KM_DB].[dbo].[km_ph_act_chapters] 
ORDER BY CONVERT(INT, dbo.getIntPortion(km_ph_act_chapt_no)) ,
   km_ph_act_chapt_no
尝试:

但我建议不要使用这样的标量函数。

试试:


但我建议不要使用这样的标量函数。

添加二级排序,以便在按前导数字排序后对字母进行排序

e、 g


添加二级排序,以便在按前导编号排序后对字母进行排序

e、 g


它的排序与数字。。。但不是按照我上面提到的顺序。你能解释一下你试图排序的算法吗?你是想按数字部分排序,然后按数字内的字母排序吗?嗨,史蒂文,我必须按数字内的字母排序。如果行有两列,一列是int部分,一列是varchar部分,那就很容易了。乔德雷尔:实际上,我只需要按章节号排序。所以考虑一下…第1章、第1B章、第2章等,其数字排序。。。但不是按照我上面提到的顺序。你能解释一下你试图排序的算法吗?你是想按数字部分排序,然后按数字内的字母排序吗?嗨,史蒂文,我必须按数字内的字母排序。如果行有两列,一列是int部分,一列是varchar部分,那就很容易了。乔德雷尔:实际上,我只需要按章节号排序。所以考虑一下…第1章、第1B章、第2章等。。。,
SELECT km_ph_act_chapt_no FROM [KM_DB].[dbo].[km_ph_act_chapters]
ORDER BY CONVERT(INT, dbo.getIntPortion(km_ph_act_chapt_no)), km_ph_act_chapt_no