0

我需要一个计算列公式来给我这个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
4

1 回答 1

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
于 2012-11-14T18:16:09.787 回答