将列传递给 UDF

Posted

技术标签:

【中文标题】将列传递给 UDF【英文标题】:Passing a column to a UDF 【发布时间】:2015-10-19 02:24:16 【问题描述】:

我有一个包含很多 SSN 的表,需要将其传递给一个 UDF,该 UDF 将对其进行验证并说明其是否有效。

例如,当我执行以下查询时,我得到一个错误:

SELECT [dbo].[f_Is_Valid_SSN_Regex]( (select SSN from dbo.table_name))

我得到的错误

Msg 512, Level 16, State 1, Line 1
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

我不认为这需要一个游标(我不想拥有它),但是有没有办法使用这个函数来验证该列上的所有记录?

谢谢,

房车

【问题讨论】:

【参考方案1】:

您可以为此使用普通的select

SELECT SSN, [dbo].f_Is_Valid_SSN_Regex(SSN)
from dbo.table_name;

如果要查看是否全部通过,则使用聚合:

SELECT MIN(dbo.f_Is_Valid_SSN_Regex(SSN))
from dbo.table_name;

如果函数返回 0 表示失败,返回 1 表示通过,那么只有在全部通过时才会返回 1。

【讨论】:

优秀。这很好用。虽然我现在只得到全 0。但这可能是一个单独的问题。但目前,这个问题已经解决。非常感谢戈登!

以上是关于将列传递给 UDF的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据框列传递给scala函数

如何将两个数据框中的列传递给 Haversine 函数?

将 Pandas 列传递给函数时出现“ValueError:Series 的真值不明确”

如何使用 spark.sql 将表列传递给 rand 函数?

如何在执行 SELECT... 语句时将表列传递给 plpgsql 函数

在 pyspark 中,我想将值的数据帧列传递给函数并在该数据列中操作说,第 5 个值