PDA

View Full Version : Sắp xếp chuỗi ký tự


vnpan78
01-14-2011, 01:01 PM
Bài toán:
Sắp xếp 1 chuỗi ký tự cho trước thanh A->Z
Vd: 'wwbbaabbcceeffddyyzz' => 'aabbbbccddeeffwwyyzz'
chú ý: Không sử dụng bảng
mọi người tham gia xử lý nhé!

thucpd
01-15-2011, 08:30 AM
DECLARE @Str NVARCHAR(200)
DECLARE @Gt NCHAR(1)
DECLARE @Len INT
DECLARE @I INT, @J INT
DECLARE @Status INT
SET @Str='wwbbaabbcceeffddyyzz'
PRINT 'Chuoi khi chua sap xep :'
PRINT @Str
SET @Len=LEN(@str)
SET @Status=1
WHILE (@Status>0)
BEGIN
SET @I=1
WHILE @I<@Len
BEGIN
IF SUBSTRING(@Str,@I,1)>SUBSTRING(@Str,@I+1,1)
BEGIN
SET @Gt=SUBSTRING(@Str,@I+1,1)
SET @Str=LEFT(@Str,@I-1)+@Gt+SUBSTRING(@Str,@I,1)+SUBSTRING(@Str,@I+2,LE N(@Str)-LEN(LEFT(@Str,@I-1))-2)
END
SET @I=@I+1
END
SET @Status= 0
SET @J=1
WHILE (@J<@Len)
BEGIN
IF SUBSTRING(@Str,@J,1)>SUBSTRING(@Str,@J+1,1)
BEGIN
SET @Status= @Status+1
END
SET @J=@J+1
END
END
PRINT 'Chuoi sau khi sap xep :'
PRINT @Str

vnpan78
01-15-2011, 10:43 AM
DECLARE @_Str VARCHAR(100), @_i INT, @_j INT, @_asci CHAR(1), @_ascj CHAR(1), @_Temp CHAR(1)
DECLARE @_Str2 VARCHAR(100)
SET @_Str = 'wwbbaabbcbdsjndsndscusdhnsAdcndscBuhsdsđssdsdsdsd sdsdsdaodamxapnwoceeffddyyzz'
SELECT @_Str AS Chuoi_Truoc_Sap_Xep

SET @_i = 1
WHILE @_i < LEN(@_Str)+1
BEGIN
SET @_asci = SUBSTRING(@_Str,@_i,1)
SET @_j = @_i + 1
WHILE @_j < LEN(@_Str)+1
BEGIN
SET @_ascj = SUBSTRING(@_Str,@_j,1)
IF @_asci > @_ascj
BEGIN
SET @_Str = STUFF(@_Str,@_j,1,@_asci)
SET @_Str = STUFF(@_Str,@_i,1,@_ascj)
SET @_Temp = @_ascj
SET @_ascj = @_asci
SET @_asci = @_Temp
END
SET @_j = @_j + 1
SET @_temp = ''
END
SET @_i = @_i + 1
END
SELECT @_Str AS Chuoi_Sau_Sap_Xep

TrungBravo
01-19-2011, 02:28 PM
DECLARE @_RandomString nvarchar(4000), @_StrTmp nvarchar(4000), @_i Int, @_Len Int,
@_OutString nvarchar(4000), @_ParmDefinition nvarchar(500);

SET @_RandomString = N'aogrjerokmlbkrmorelegkbmrelbr';
SET @_ParmDefinition = N'@_OutString nvarchar(4000) OUTPUT';

SET @_Len = LEN(@_RandomString);
SET @_i = 1;
SET @_OutString = '';

SET @_StrTmp =
N'WITH cte (F1)
AS
(
'
WHILE @_i < @_Len
BEGIN
SET @_StrTmp = @_StrTmp + N'SELECT ' + NCHAR(39) + SUBSTRING(@_RandomString, @_i, 1) + NCHAR(39) + ' UNION ALL' + NCHAR(13)
SET @_i = @_i + 1
END
SET @_StrTmp = @_StrTmp + 'SELECT ''' + RIGHT(@_RandomString, 1) + ''')' + NCHAR(13) +
N'SELECT @_OutString = (SELECT '''' + F1 FROM cte FOR XML PATH(''''))
'

EXECUTE sp_executesql @_StrTmp, @_ParmDefinition, @_OutString OUTPUT

SELECT @_OutString

vnpan78
01-20-2011, 08:27 AM
Bài của bác TrungBravo lách luật với with tuy nhiên thiếu order by F1