Создание функции для оснастки, треск, поп - PullRequest
0 голосов
/ 18 мая 2019

Создайте функцию с именем fncSCP, которая принимает int n в качестве параметра и возвращает varchar Обновите функцию, которую вы создали в задаче № 1, чтобы: Если n поровну делится на 2, тогда присвойте вашему varchar значение 'Snap' Если n поровну делится на 3, тогда присвойте вашему varchar значение 'Crackle' Если n поровну делится на 5, тогда присвойте вашему varchar значение 'Pop' иначе установите свой varchar значение n. Этот код не работает. Я получаю concat ошибки. Любой совет?

CREATE FUNCTION fnSCP (@n INT)
    RETURNS VARCHAR(10)
AS
BEGIN
    DECLARE @input INT = n;

    IF (@input % 2) <> 0
    CONCAT(varchar, 'snap')
BEGIN
    IF (@input % 3) <> 0
    CONCAT(varchar, 'crackle')
BEGIN
    IF (@input % 5) <> 0
    CONCAT(varchar, 'pop')

END; 
END;
END;

1 Ответ

2 голосов
/ 18 мая 2019

Для меня ваш вопрос звучит так (хотя, похоже, он вытекает из другого вопроса?):

CREATE FUNCTION fnSCP (@n INT)
    RETURNS VARCHAR(20)
AS

BEGIN

    RETURN
    (
        SELECT
            CASE
                WHEN
                    @n % 2 <> 0
                    AND @n % 3 <> 0
                    AND @n % 5 <> 0
                THEN CAST(@n AS varchar(20))
                ELSE
                    CONCAT(
                        CASE WHEN @n % 2 = 0 THEN 'Snap' END
                        , CASE WHEN @n % 3 = 0 THEN 'Crackle' END
                        , CASE WHEN @n % 5 = 0 THEN 'Pop' END
                    )
            END
    )

END

Несмотря на то, что вы вернулись varchar(10), это заставляет меня думать, может быть, это:

CREATE FUNCTION fnSCP (@n INT)
    RETURNS VARCHAR(10) -- ought to be varchar(11); see below
AS

BEGIN

    RETURN
    (
        SELECT
            CASE
                WHEN @n % 2 = 0 THEN 'Snap'
                WHEN @n % 3 = 0 THEN 'Crackle'
                WHEN @n % 5 = 0 THEN 'Pop'
                ELSE CAST(@n AS VARCHAR(10)) -- ought to be varchar(11); see below
            END
    )

END

Хотя я только что прочитал, что -2147483648 - это минимальное (максимально отрицательное) значение для типа данных int, которое не входит в varchar(10), поэтому в этом случае оно должно быть varchar(11).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...