如何使用 UDF Scalar 函数打印字母?

Posted

技术标签:

【中文标题】如何使用 UDF Scalar 函数打印字母?【英文标题】:How to print Alphabets using UDF Scalar function? 【发布时间】:2017-02-10 04:59:29 【问题描述】:

我正在尝试通过创建 UDF 标量函数来打印字母。 这是我的代码:

create function [dbo].[fnalphabets]()
returns varchar
as begin
declare @num int=65
 while(@num<=90)
 begin
 set @num=@num+1
 end
  return char(@num)
 end

当我使用

调用此函数时
select dbo.fnalphabets()

它没有返回预期的结果。谁能告诉我我的代码有什么问题?

【问题讨论】:

预期输出 我想打印从 A 到 Z 的字母 你正在循环遍历所有函数,但最后只返回一个函数! 是的,但是如何全部打印? 【参考方案1】:

不需要循环函数任何东西。只需从master 数据库中获取Spt_Values 表中的数字并将它们转换为Char

SELECT CHAR(number)
FROM master.dbo.spt_values
WHERE type = 'p'
    AND NUMBER BETWEEN 65
        AND 90
ORDER BY NUMBER

编辑: 来自评论:上述代码的 UDF

Go
ALTER FUNCTION [dbo].[fnalphabets]()
RETURNS VARCHAR(MAX)
AS BEGIN
    DECLARE @Alphabates VARCHAR(130)='';
    SELECT  @Alphabates = @Alphabates +CHAR(number) +'
    '
    FROM master.dbo.spt_values
    WHERE type = 'p'
    AND NUMBER BETWEEN 65
        AND 90
    ORDER BY NUMBER

    RETURN @Alphabates
END

【讨论】:

是的,但我想通过使用标量 UDF 来做到这一点 把上面的select放到一个函数里。并称它为@JasonClark【参考方案2】:

试试这个:我在这里更改了它的返回 varchar 大小并声明变量以存储字母字符串。并将 char 值存储在 while 循环中。如下并返回相同的字母字符串。

CREATE FUNCTION [dbo].[fnalphabets]()
RETURNS VARCHAR(MAX)
AS BEGIN
  DECLARE @num INT=65
  DECLARE @Alphabates VARCHAR(100)=''
  WHILE(@num<=90)
  BEGIN
    SET @Alphabates=@Alphabates+char(@num)
    SET @num=@num+1
  END
  RETURN @Alphabates
END

【讨论】:

它工作正常,但请你解释一下@Alphabates 的作用 它只是保存返回值,即您将在调用代码中打印的 a-z 字母。 @JaydipJ 我想再问一件事,我们可以使用@num 保存值并通过return char(@num 返回其值)但是为什么它不像@Alphabates 那样工作? 以及为什么我们在 DECLARE @Alphabates VARCHAR(100)='' 中使用 VARCHAR(100)='' ?因为我们可以简单地使用DECLARE @Alphabates VARCHAR(100) 来保存值 是的,但是当我只使用DECLARE @Alphabates VARCHAR(100)时它返回NULL【参考方案3】:

试试这个:您可以使用Table Valued Functions,如下所示,它会在单独的行中为您提供每个 A-Z:

CREATE FUNCTION [dbo].[fnalphabets]()
RETURNS @list TABLE (alphabet VARCHAR(10))
BEGIN
    DECLARE @num INT=65
     WHILE(@num<=90)
     BEGIN
        INSERT INTO @list SELECT CHAR(@num)
        SET @num=@num+1
     END

      RETURN
END

SELECT * FROM [dbo].[fnalphabets]()

【讨论】:

以上是关于如何使用 UDF Scalar 函数打印字母?的主要内容,如果未能解决你的问题,请参考以下文章

Flink扩展 Table/SQL Scalar 函数实现文档

Flink扩展 Table/SQL Scalar 函数的实现

如何写hive的udf函数

如何在Hive&Impala中使用UDF

udf(用户定义函数)如何在 pyspark 中工作?

Hive 如何实现自定义函数 UDF