Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

IliqnK avatar IliqnK 30 Точки

[HOMEWORK] DB - Functions - Problem 7. Define Function

Здравейте,

Някой може ли да помогне с първите 2 теста от този проблем?

Ето и заявката ми:

CREATE FUNCTION ufn_IsWordComprised
  (
  @setOfLetters nvarchar(max), 
  @word nvarchar(max)
  )
RETURNS bit
AS
BEGIN 
    SET @word = REPLACE(@word, char(9), '')
    SET @word = RTRIM(LTRIM(@word))
    DECLARE @l int = 1;
    WHILE LEN(@word) >= @l
    BEGIN
      DECLARE @charindex int; 
      DECLARE @letter char(1);
      SET @letter = SUBSTRING(@word, @l, 1)
      SET @charindex = CHARINDEX(@letter, @setOfLetters, 0)
      IF @charindex = 0
      BEGIN 
        RETURN 0
      END
      SET @setOfLetters = STUFF(@setOfLetters, @charindex, 1, '')
      SET @l += 1;
    END

    RETURN 1
END

Тагове:
0
Module: C# DB 11/10/2016 10:55:55
silviyadimitrova avatar silviyadimitrova 6 Точки

Някой може ли да ми каже къде бъркам (освен, че решението е доста дълго..)?

И между другото не трябва ли да търсим резултат 0, ако в Word има два пъти буква, която в SetOfLetters присъства само веднъж? В този случай не можем да конструираме думата Word от дадените букви.

 

CREATE FUNCTION ufn_IsWordComprised(@SetOfLetters NVARCHAR(50), @Word NVARCHAR(50))

RETURNS BIT
AS
BEGIN
    DECLARE @Result BIT = 0

    IF (LEN(@SetOfLetters) < LEN(@Word))
        BEGIN
            RETURN @Result
        END
    
    DECLARE
        @CurrentIndex INT = 1,
        @CurrentLetterIndex INT = 1

    WHILE(LEN(@SetOfLetters) <> 0 AND @CurrentLetterIndex <= LEN(@Word))
    BEGIN
        IF (CHARINDEX(SUBSTRING(@Word, @CurrentLetterIndex, 1), @SetOFLetters, 1) = 0)
        BEGIN
            RETURN @Result
        END
        
        DECLARE @CurrentLetter NVARCHAR(1) = SUBSTRING(@Word, @CurrentLetterIndex, 1)

        SET @SetOfLetters = REPLACE(@SetOfLetters, @CurrentLetter, '')

        SET @CurrentIndex += 1
        SET @CurrentLetterIndex += 1

    END

    SET @Result = 1
    RETURN @Result
END
 

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.