在SQL Server中创建一个函数,该函数返回许多用于排序的值

时间:2018-10-10 11:00:23

标签: sql-server

我有一个具有自定义排序的存储过程(在order by之后)。换句话说,在order by之后,我对某些字段进行了一些子字符串和长度计算,并根据两个条件进行了排序:

    Order By 
 LEFT(InvoiceID, PATINDEX('%[0-9]%', InvoiceID) - 1), --first sort value
 CONVERT(INT, SUBSTRING(InvoiceID, PATINDEX('%[0-9]%', InvoiceID), LEN(InvoiceID))) -- second sort value

问题是我需要在许多其他存储过程上使用相同的排序。因此,我想创建一个应用相同排序的函数。虽然我可以使一个函数返回一个值,但是我需要一个如上所述的返回两个值的函数。

此sql函数不起作用:

CREATE FUNCTION [dbo].[fn_AlphaNumreicSort] (@AlphaNumreicValue nvarchar(MAX))
RETURNS (
@SortedVar1  nvarchar(MAX)
,@SortedVar2  nvarchar(MAX)
)
AS
....

处理此问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

要返回多个值,您需要声明一个表值函数。
在您的情况下,您也可以创建内联函数,它的另一个好处是它可以像part of the query一样运行得更快。

java.time

然后,您在带有create function [dbo].[fn_AlphaNumreicSort] (@AlphaNumreicValue nvarchar(MAX)) returns table as return ( select LEFT(@AlphaNumreicValue, PATINDEX('%[0-9]%', @AlphaNumreicValue) - 1) as SortedVar1, CONVERT(INT, SUBSTRING(@AlphaNumreicValue, PATINDEX('%[0-9]%', @AlphaNumreicValue), LEN(@AlphaNumreicValue))) as SortedVar2 ); 的查询中使用它:

outer apply