MS SQL: Order by prema broju ako je dio stringa broj

Problem:

selektirane podatke poredati (ORDER BY) kao da su brojevi iako je samo dio vrijednosti broj

npr. recimo da se polje prema kojem želimo poredati rezultat zove “mojeMijesanoPolje”

pero2peric
pero3peric
pero1peric

treba biti:

pero1peric
pero2peric
pero3peric

Rješenje:

Iako postoji i drugih rješenja ovo mi se čini baš “šeretski”…

1. napravimo funkciju kao što to kaže dobra duša na http://bendynet.com/it/ms-sql-functions-to-parse-int-or-alpha-characters/

<code>SET ANSI_NULLS ON
 GO
 SET QUOTED_IDENTIFIER ON
 GO
 CREATE FUNCTION [dbo].[parseInt]
 (
 @string VARCHAR(8000)
 )
 RETURNS VARCHAR(8000)
 AS
 BEGIN
 DECLARE @IncorrectCharLoc SMALLINT
 SET @IncorrectCharLoc = PATINDEX('%[^0-9]%', @string)
 WHILE @IncorrectCharLoc > 0
 BEGIN
 SET @string = STUFF(@string, @IncorrectCharLoc, 1, '')
 SET @IncorrectCharLoc = PATINDEX('%[^0-9]%', @string)
 END
 SET @string = @string
 RETURN @string
 END</code>

2. primijenimo:

 ... ORDER BY dbo.parseInt(mojeMijesanoPolje) ASC

3. Još to nije to, zar ne!? S ovim gore samo smo izvukli broj iz stringa ali i taj broj je još uvijek string. Rješenje je CAST:

... ORDER BY CAST(dbo.parseInt(mojeMijesanoPolje) AS int) ASC

Leave a Reply

You must be logged in to post a comment.