Latest Entries »

Monday, July 12, 2010

SELECT MAX String FROM TABLE

Dzień dobry. Niedawno spotkałem się z potrzebą wyświetlenia najdłuższego napisu z tabeli bazy danych. Ku mojemu zdziwieniu zapytanie MAX(kolumna nvarchar) nie zwróciła najdłuższego napisu a jakiś bezsensowny. Podejrzewam, że silnik MSSQL zsumował wartość każdej litery w napisie zmieniając ją w wartość liczbową dlatego też była potrzeba utworzenia własnego sposobu na wykonanie czynności.

Funkcja jest bardzo prosta: obcina z obu stron: ltrim rtrim kolumnę z napisem, a następnie otrzymujemy długość napisu funkcją LEN. Gdy już posiadamy długość napisu to wykonujemy zapytanie WHERE LEN(Kolumna) = największa długość napisu.

Zatem to dzieła:


CREATE FUNCTION [dbo].[GetMaxLenghtString]()
RETURNS TABLE 
AS
RETURN 
(
SELECT LEN(Title) as Lenght,Title FROM Books WHERE LEN(Title) = (SELECT max(len(ltrim(rtrim(Title)))) from Books)
)
GO

Żeby zobaczyć wynik musimy wykonać odpowiednie zapytanie:

select * from GetMaxLenghtString()

Funkcja ta zwróci najdłuższy napis. Gdy będzie kilka takich napisów wynikowa tabela będzie zawierać kilka wierszy. Można doprawić do smaczku funkcję aby zwracała 1 wartość umieszczająć po SELECT klauzulę DISTINCT.

Dziękuję.

0 comments:

Post a Comment