计算列公式(yyMMdd ##)

时间:2012-11-14 18:03:56

标签: sql sql-server tsql

我需要一个计算列公式,为我提供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

1 个答案:

答案 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