Patindex를 사용하여 첫 번째 숫자 식을 첫 번째 정렬 필드로 찾은 다음 숫자 부분을 두 번째 sortfield로 정수로 추출하고 전체 문자열을 세 번째 정렬 필드로 사용하면 원하는 결과를 얻을 수 있습니다. 출력과
Declare @a Table (c varchar(50))
Insert Into @a
Select 'FW-1'
Union Select 'FW-10'
Union Select 'FW-11'
Union Select 'FW-12'
Union Select 'FW-13'
Union Select 'FW-1A'
Union Select 'FW-2'
Union Select 'FW-3'
Union Select 'FW-R1'
Union Select 'FW-A1'
;With CTE as
(Select 1 as ID
Union All
Select ID + 1 from CTE where ID < 100
)
Select * from
(
Select c
,PATINDEX('%[0-9]%',c) as s1
,(Select Cast(
(Select Case
When SUBSTRING(c, ID, 1) LIKE '[0-9]'
Then SUBSTRING(c, ID, 1)
Else ''
End
From (Select * from CTE) AS X(ID)
Where ID <= LEN(c)
For XML PATH(''))
as int)
)
as s2
from
@a
) x
order by
s1,s2,c
:
FW-1 4 1 -1
FW-1A 4 1 -1A
FW-2 4 2 -2
FW-3 4 3 -3
FW-10 4 10 -10
FW-11 4 11 -11
FW-12 4 12 -12
FW-13 4 13 -13
FW-A1 5 1 A1
FW-R1 5 1 R1
의 주요 부분 (FW-) 당신은 당신이 그것을 할 수 있다면 하나 개의 추가 정렬 필드를
Declare @a Table (c varchar(50))
Insert Into @a
Select 'FW-1'
Union Select 'FW-10'
Union Select 'FW-11'
Union Select 'FW-12'
Union Select 'FW-13'
Union Select 'FW-1A'
Union Select 'FW-2'
Union Select 'FW-3'
Union Select 'FW-R1'
Union Select 'FW-A1'
Union Select 'AB-A1'
Union Select 'AB-11'
;With CTE as
(Select 1 as ID
Union All
Select ID + 1 from CTE where ID < 100
)
Select * from
(
Select c
,SubString(c,1,PATINDEX('%[0-9]%',c)-1) as S0
,PATINDEX('%[0-9]%',c) as s1
,(Select Cast(
(Select Case
When SUBSTRING(c, ID, 1) LIKE '[0-9]'
Then SUBSTRING(c, ID, 1)
Else ''
End
From (Select * from CTE) AS X(ID)
Where ID <= LEN(c)
For XML PATH(''))
as int)
)
as s2
from
@a
) x
order by
s0,s1,s2,c
감사합니다. 매우 감사합니다. 그것은 내 목숨을 구할 것이다 : P. 이제이 주문을 쿼리 주문으로 사용하고 있습니다. (예 : AS_NUMERIC (SUBSTRING (joint_no, 4, 5)) = 1 그런 다음 (COMMAND_ NO, 4, 5) 숫자 열만 주문하시오. –
내 답변은 당신이 그것을 할 수있는 방법을 보여주고 있습니다. 필립 - 그론 디어의 조언은 당신에게 더 유용 할 것입니다. – bummi
내 테이블 이름은 제조 테이블입니다 내 컬럼 -i 주문 - 이름은 공동 번호가 없습니다 날 위해이 테이블을 수정할 수 있습니다. 그것은 나에게 매우 좋을 것이다. 그리고 그것이 끝나면 나는 여러 번 승리 할 것이다. :) –