我有存储为 nvarchar(25) 的发票编号。
它们的格式是“####AA” #### 是发票号,AA 是版本号(部分订单发货) 我无法更改格式。
我创建了两个标量函数:
CREATE FUNCTION [dbo].[fnNumbersFromStr](@str varchar(8000))
RETURNS int
AS
BEGIN
WHILE PATINDEX('%[^0-9]%',@str)> 0
SET @str = REPLACE(@str, SUBSTRING(@str, PATINDEX('%[^0-9]%', @str), 1), '')
RETURN CAST(@str AS INT)
END
还有弟弟:
CREATE FUNCTION [dbo].[fnStringFromNum](@str varchar(25))
RETURNS varchar(25)
AS
BEGIN
WHILE PATINDEX('%[^a-z]%',@str)> 0
SET @str = REPLACE(@str, SUBSTRING(@str, PATINDEX('%[^a-z]%', @str), 1), '')
RETURN @str
END
这个脚本让我停滞不前:
SELECT
strInvoiceNo,
dbo.fnNumbersFromStr(strInvoiceNo) AS [InvoiceNumber],
dbo.fnStringFromNum(strInvoiceNo) AS [InvoiceString]
FROM @TempTable
运行时返回:
strInvoiceNo InvoiceNumber InvoiceString
1000A 1000 A
1000B 1000 B
1000C 1000 C
1001A 1001 A
1001B 1001 B
1002AA 1002 AA
1002AB 1002 AB
1003A 1003 A
1004A 1004 A
我只是想不出下一步该怎么做。我卡住了。
我希望选择只返回最新的发票版本:
1000℃
1001B
1002AB
1003A
1004A
Sql、Lamda 或 Linq 都适合我。
提前致谢
最佳答案
试试这个:
SELECT
InvoiceNumber + MAX(InvoiceString) As strInvoiceNo
FROM
(
SELECT
dbo.fnNumbersFromStr(strInvoiceNo) AS [InvoiceNumber],
dbo.fnStringFromNum(strInvoiceNo) AS [InvoiceString]
FROM @TempTable
) As tbl
GROUP BY InvoiceNumber
关于c# - 如何只获取最新的发票编号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33353249/