小编典典

SQL函数返回格式化的电话号码列表

javascript

希望构建一个 SQL Server 函数,该函数从表中提取电话号码列表并以特定方式格式化它们,以便可以将它们传递到寻呼系统 API。

返回的值可以包含任意数量的电话号码,每个电话号码都需要用双引号括起来并用逗号分隔。

以下功能:

BEGIN
DECLARE @MyRESULT varchar(max)
DECLARE @PAGING_RESULTS nvarchar(max)
DECLARE MyCursor CURSOR FOR
SELECT PHONE_NUMBER FROM CONTACTS WHERE ON_CALL = 1
OPEN MyCursor
FETCH NEXT FROM MyCursor INTO @MyRESULT
WHILE @@FETCH_STATUS = 0
BEGIN
Set @PAGING_RESULTS = isnull(@PAGING_RESULTS, '') + '"%2B' + isnull(@MyRESULT, '') +  '",'
FETCH NEXT FROM MyCursor INTO @MyRESULT
END
Close MyCursor
deallocate MyCursor
Set @PAGING_RESULTS = isnull(@PAGING_RESULTS, '')
return @PAGING_RESULTS
END

让我很接近,但它在结果末尾留下了一个额外的逗号,这会破坏 API 调用。

有没有更好的方法可以做到这一点,或者我可以在函数中做额外的工作来清理结果。

样本数据:

电话 随传随到
1234567890 1
9876543210 1
7652341890 1

理想结果:

“1234567890”、“9876543210”、“7652341890”

当前函数确实返回了我的结果集,但末尾有一个额外/无效的逗号,例如:

“1234567890”、“9876543210”、“7652341890”、

非常感谢!


阅读 159

收藏
2022-07-21

共1个答案

小编典典

光标很慢,不要将它们用于简单的事情。

编辑:正如一些人所说,不要使用这种“聪明”的方式,因为可能会出现意想不到的结果:

-- DECLARE @MyRESULT varchar(max)=''
-- SELECT @MyRESULT = @MyRESULT + '"%2B' + ISNULL(PHONE_NUMBER, '') +  '",'
-- FROM CONTACTS WHERE ON_CALL = 1
-- RETURN LEFT(@MyRESULT,LEN(@MyRESULT)-1)

当您的 MSSQL 版本为 2017 或更高版本时:

DECLARE @MyRESULT VARCHAR(MAX)
SELECT @MyRESULT = STRING_AGG('%2b"'+PHONE_NUMBER+'"',',')
FROM CONTACTS WHERE ON_CALL=1

STRING_AGG 的源代码在互联网上是可用的,所以 - 可以实现自己的 string_agg 或只使用 FOR XML。

2022-07-21