我需要一个计算列公式,为我提供yyMMdd##
。
我有一个标识列(DataID
)和一个日期列(DataDate
)。
这是我到目前为止所做的。
(((right(CONVERT([varchar](4),datepart(year,[DataDate]),0),(2))+
right(CONVERT([varchar](4),datepart(month,[DataDate]),0),(2)))+
right(CONVERT([varchar](4),datepart(day,[DataDate]),0),(2)))+
right('00'+CONVERT([varchar](2),[DataID],0),(2)))
这给了我:
12111201
12111202
12111303
12111304
12111405
12111406
12111407
12111508
我想要的是:
12111201
12111202
12111301
12111302
12111401
12111402
12111403
12111501
答案 0 :(得分:3)
我假设你希望每个日期的序列从1开始 - 对吗?如果没有:请解释您真正想要/需要的是什么。
您将无法使用IDENTITY
列和计算列规范执行此操作。 IDENTITY
列会不断增加数字。
可能做的不是将这些值存储在磁盘上 - 而是使用CTE和ROW_NUMBER() OVER (PARTITION BY....)
构造动态创建这些数字 - 只要您需要选择它们。或者有一份工作,定期根据这样的CTE设定这些价值(例如每小时一次)。
CTE可能看起来像这样 - 再次,假设 DataDate
确实属于DATE
类型(而不是DATETIME
或类似的东西):
;WITH CTE AS
(
SELECT
DataID, DataDate,
RowNum = ROW_NUMBER() OVER (PARTITION BY DataDate ORDER BY DataID)
FROM
dbo.YourTable
)
SELECT
DataID, DataDate, RowNum
FROM
CTE