使用SQL进行排序
我是SQL Server的新手。因此,我需要对以下数据进行排序使用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
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