c# - 如何只获取最新的发票编号

标签 c# sql-server linq

我有存储为 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/

相关文章:

c# - WPF - 是否可以(以编程方式)禁用多点触控?

node.js - NodeJs express4-tedious - SELECT 的存储过程以 JSON 形式返回响应

sql-server - SSRS 折线图。如何阻止数字在垂直轴上重复

c# - 来自数据库的 varbinary pdf 已崩溃?

c# - 根据正在使用的 Office 语言包而不是 Windows 的当前语言本地化 Office 加载项

c# - 代码隐藏页面不能 "see"在 aspx 页面中声明的任何项目/控件

linq - 如何编写LINQ查询以将多行合并为一行?

c# - 使用 LINQ to XML 解析 SOAP 响应 - 如何获取父项下的嵌套节点?

c# - 为什么我的项目引用指向 "obj"目录下的一个dll?

mysql - 仅将表数据从 MSSQL 迁移到 MySQL