创建具有复合主键的SQL表的最佳解决方案是什么。
ID
{int
}。 YearMonth
{string
,例如yyyyMM ex。 201409}这是当月。 可以每月将ID重新设置为1
我实际上需要像
这样的运行ID"201409-00001"
"201409-00002"
"201409-00003"
.
.
"201410-00001"
"201410-00002"
.
.
"201411-00001"
答案 0 :(得分:3)
根据问题和您的评论,您似乎需要以201411-00001
格式显示行标识符。这不一定是您的实际主键。我建议您做这样的事情。
使用ID
创建表格,即Identity。添加另一列YearMonth CHAR(6)
列,其中存储YYYYMM
,或者如果您已经有一个列将日期存储为date/datetime
,请使用该列。在你的SELECTs
,你会做这样的事情
LEFT(CONVERT(VARCHAR(10),YearMonth,112),6) + '-' + RIGHT(REPLICATE('0',5) + CONVERT(VARCHAR(5),ROW_NUMBER() OVER(PARTITION BY DateCol, ORDER BY ID),5)
您可以选择使用触发器根据当月的INT
更新新的monthlyID
列MAX(monthlyID) + 1
。
答案 1 :(得分:0)
您是否尝试连接它们并创建新列以使其成为主键?
不知道是否有更简单的方法,但这应该有效:
SELECT CONCAT(YEAR(CURRENT_TIMESTAMP), MONTH(CURRENT_TIMESTAMP),'-',ID)
FROM <TABLE NAME>;
答案 2 :(得分:0)
答案 3 :(得分:0)
最后,我尝试使用@ughai先生的概念 我使用下面的查询将值保存在另一列上,以表示相对于月份的ID。
select LEFT(CONVERT(VARCHAR(10),YearMonth,112),6) + '-' + RIGHT(REPLICATE('0',4) + CONVERT(VARCHAR(5),ROW_NUMBER() OVER(PARTITION BY LEFT(CONVERT(VARCHAR(10),YearMonth,112),6) ORDER BY ID)),5) from TestTable
答案 4 :(得分:-1)
尝试这样的事情:
ALTER TABLE table_name AUTO_INCREMENT = 1
和此:
ALTER TABLE foobar_data MODIFY COLUMN col VARCHAR(255) NOT NULL DEFAULT '201409';
每月通过某种方法运行此查询;)