Kategorie szkoleń | Egzaminy | Kontakt
  • 1
  • 1
  • 470

Odpowiedź (1)

  • 2

W przypadku SQL Server można zrealizować to zadanie za pomocą T-SQLa lub SQL CLRa, ocena wydajności może być jednak dokonana wyłącznie w sprecyzowanych warunkach (infrastruktura, konfiguracja, środowisko, implementacja, dane).

Przykładową implementację w T-SQL można oprzeć o tabelę słownikową oraz funkcję.
Przykład tabeli (oraz części danych):

 

CREATE TABLE [dbo].[Liczby]
    (
      Liczba INTEGER NOT NULL UNIQUE,
      Slowo [nvarchar](25) NOT NULL
    )
GO
INSERT INTO [Liczby] 
VALUES
( 0, 'zero')
INSERT INTO [Liczby] 
VALUES( 1, 'jeden')
INSERT INTO [Liczby] 
VALUES( 2, 'dwa')
INSERT INTO [Liczby] 
VALUES( 3, 'trzy')
INSERT INTO [Liczby] 
VALUES( 4, 'cztery')
INSERT INTO [Liczby] 
VALUES( 5, 'pięć')
INSERT INTO [Liczby] 
VALUES( 6, 'sześć')
INSERT INTO [Liczby] 
VALUES( 7, 'siedem')
INSERT INTO [Liczby] 
VALUES( 8, 'osiem')
INSERT INTO [Liczby] 
VALUES( 9, 'dziewięć')
INSERT INTO [Liczby] 
VALUES( 10, 'dziesięć')

INSERT INTO [Liczby] 
VALUES( 20, 'dwadzieścia')
INSERT INTO [Liczby] 
VALUES( 30, 'trzydzieści')
INSERT INTO [Liczby] 
VALUES( 40, 'czterdzieści')
INSERT INTO [Liczby] 
VALUES( 50, 'pięćdziesiąt')

INSERT INTO [Liczby] 
VALUES( 100, 'sto')

Przykład funkcji:

 

CREATE FUNCTION dbo.ToWords 
( @num AS INTEGER ) RETURNS NVARCHAR(50)
AS
BEGIN
DECLARE @words AS NVARCHAR(255)
IF      @num < 0 SELECT @words = 'BLAD'
ELSE IF @num < 20 SELECT @words = Slowo FROM Liczby WHERE Liczba = @num
ELSE IF @num < 100  (SELECT @words = TDz.Slowo + ' ' + TJedn.Slowo 
                     FROM Liczby AS TJedn
                     CROSS JOIN Liczby AS TDz
                     WHERE TJedn.Liczba = (@num % 100) % 10
                       AND TDz.Liczba = (@num % 100) - (@num % 100) % 10)
ELSE IF @num = 100 SELECT @words = Slowo FROM Liczby WHERE Liczba = @num
ELSE SELECT @words = STR(@num)
RETURN @words
END
GO

Wywołanie:

SELECT dbo.ToWords(5);
SELECT dbo.ToWords(38);
SELECT dbo.ToWords(55);
SELECT dbo.ToWords(100);
  • Odpowiedział
  • @ | 27.01.2015
  • TRENER ALTKOM AKADEMII