0

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))

このアルファは注文していません... うまくいけば、返信を待っています。

よろしくお願いいたします。

アスカー

4

3 に答える 3

3

試す:

ORDER BY CONVERT(INT, dbo.getIntPortion(km_ph_act_chapt_no)), km_ph_act_chapt_no;

しかし、このようなスカラー関数は使用しないことをお勧めします。

于 2012-08-13T13:11:34.797 に答える
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
于 2012-08-13T13:10:44.573 に答える
1

先頭の数字で並べ替えた後に文字を並べ替えるように、二次並べ替えを追加します

例えば

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
于 2012-08-13T13:14:18.287 に答える