创建一个名为fncSCP的函数,该函数将int n作为参数并返回一个varchar 将您在问题1中创建的函数更新为: 如果n平均分为2,则将'Snap'值连接到varchar 如果n被3均分,则将'Crackle'值连接到varchar 如果n平均分为5,则将varPop值连接到varchar 否则将varchar设置为n的值。该代码不起作用。我收到连续错误。有什么建议吗?
$s = "value1=php; value2=.php.net; Expires=Nov, 12-May-2020 20:51:23 GMT Path=/; random;";
preg_match("/value1=(.*?);/", $s, $matches);
print_r($matches[1]); => php
答案 0 :(得分:2)
对我来说,您的问题是这样的(尽管它似乎是另一个问题引起的?):
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)
,所以它必须是{{1} }。