我有一张名为销售额的表。在这个表中我有一列Invoice_Number。我想要达到的目的是以字母数字顺序排列发票号码,例如一个静态字母,然后是一个类似A1,A2,A3 ...等等的数字。正如我在其余的例子中看到的,我不想改变A到B.使用MSSQL的字母数字发票号码的顺序递增
我可以通过这个查询得到的数字增量:
Select IsNull(MAX([Invoice_Number] + 1), 1) from sales
但它不能在它之前加一个字母。
谢谢。
我有一张名为销售额的表。在这个表中我有一列Invoice_Number。我想要达到的目的是以字母数字顺序排列发票号码,例如一个静态字母,然后是一个类似A1,A2,A3 ...等等的数字。正如我在其余的例子中看到的,我不想改变A到B.使用MSSQL的字母数字发票号码的顺序递增
我可以通过这个查询得到的数字增量:
Select IsNull(MAX([Invoice_Number] + 1), 1) from sales
但它不能在它之前加一个字母。
谢谢。
尝试使用像这样的演员来返回一个varchar,让我知道如果这有助于:)。
SELECT 'A' + CAST(ISNULL(MAX([Invoice_Number] + 1), 1) AS nvarchar) FROM sales
您可以使用您现有的identity column作为种子。将此与computed column结合以返回InvoiceNumber
。
-- Combine a seed with a computed column.
CREATE TABLE #Example
(
Seed INT IDENTITY(1,1),
InvoiceNumber AS 'A' + CAST(Seed AS VARCHAR(5)),
Customer VARCHAR(25)
);
-- Add some sample records.
INSERT INTO #Example
(
Customer
)
VALUES
('A PLC'),
('B PLC'),
('C LTD')
;
-- Returns InvoiceNumbers A1, A2 & A3.
SELECT
*
FROM
#Example
;
或者您可以创建一个单独的序列,如果您想避免发票编号/例如当草稿记录被删除时。 CREATE SEQUENCE InvoiceCounter START WITH 1 INCREMENT BY 1; GO 选择'A'+ cast(InvoiceCounter的下一个值为nvarchar) – Reno
你不想对自己这样做。你正在创造一个竞赛条件。为什么您必须在发票编号的前面加上'A'?使用A存储在数据库中真的很重要吗?你能不能把这封信贴在发票和其他信件上?或者使用计算列将A追加到前面。 –