试图在SQL Server中创建一个计算列
问题描述:
我想在SQL Server中创建一个计算列。试图在SQL Server中创建一个计算列
这是创建列的脚本。
CREATE TABLE [dbo].[Invoice]
(
[ID] [int] IDENTITY(1,1) NOT NULL,
[InvoiceID] AS (('INV' + FORMAT(GETUTCDATE(), 'yyyyMMdd')) + RIGHT('000000' + CONVERT([VARCHAR](20), [ID]), (7))),
[Name] [nvarchar](50) NOT NULL,
[CreatedOn] [datetime] NOT NULL
CONSTRAINT [DF_Invoice_CreatedOn] DEFAULT (getutcdate())
) ON [PRIMARY]
GO
它会返回一个值,这样InvoiceId
柱:
ID InvoiceID Name CreatedOn
--- -------------------- ------- -----------------------
1 INV201705090000001 amki 2017-05-09 13:11:06.790
2 INV201705090000002 amkit 2017-05-09 13:11:26.600
3 INV201705090000003 amkit3 2017-05-09 13:11:32.397
4 INV201705090000004 amkit6 2017-05-09 13:11:35.070
但我想更多的修改它。
服务器时更改日期,然后再从1
开始这是我的期望输出。
ID InvoiceID Name CreatedOn
--- -------------------- ------- -----------------------
1 INV201705090000001 amki 2017-05-09 13:11:06.790
2 INV201705090000002 amkit 2017-05-09 13:11:26.600
3 INV201705090000003 amkit3 2017-05-09 13:11:32.397
4 INV201705100000001 amkit6 2017-05-10 13:11:35.070
5 INV201705100000002 amkit6 2017-05-10 13:11:35.070
6 INV201705110000001 amkit6 2017-05-11 13:11:35.070
正如你可以从上面的结果可以看出,它再次从开始其中来自日期更改为。
如果无法使用计算列完成,那么有没有其他方法可以实现这一点。
我知道有很多帖子与如何创建计算列有关。但是我不知道如何在日期发生变化时再次从1开始。
答
我与TheGameiswar对这一个。我认为一个视图(或简单的查询)将是最好的
例
Select ID
,Invoice = concat('INV',convert(varchar(8),CreatedOn,112),right('0000000'+convert(varchar(5),Row_Number() over (Partition By convert(date,CreatedOn) Order by CreatedOn,ID)),7))
,Name
,CreatedOn
From YourTable
返回
后更新
您能否创建一个函数来返回天数发票的计数? – apc
@apc:我没有得到你。你算什么意思? –
我不认为,这可以通过计算列来实现。您可以使用视图 – TheGameiswar