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