我正在使用MS SQL。我想使用identity()
中的convert()
来生成这样的内容:
2016071000
2016071001
我写了一个查询如下:
SELECT convert(varchar,datepart(yyyy,getdate()))+
substring(CONVERT(varchar,getdate(),112),5,2)+
CONVERT(varchar,identity(1000,1));
但我收到的错误是
关键字'identity'附近的语法不正确。
答案 0 :(得分:0)
一种方法是使用您需要的数字表:
;WITH cte AS (
SELECT 1000 as id,
1 as lev
UNION ALL
SELECT id+1,
lev+1
FROM cte
WHERE lev < 100
)
SELECT convert(varchar,datepart(yyyy,getdate()))+substring(CONVERT(varchar,getdate(),112),5,2)+CONVERT(varchar,id)
FROM cte
这将产生100行,如:
2016071000
2016071001
2016071002
...
2016071099
另一种方法是使用序列:
CREATE SEQUENCE dbo.TestSequence
START WITH 1000
INCREMENT BY 1 ;
然后运行:
SELECT convert(varchar,datepart(yyyy,getdate()))+substring(CONVERT(varchar,getdate(),112),5,2)+ CAST(NEXT VALUE FOR dbo.TestSequence as nvarchar(10))
输出:
2016071000
下次运行将是2016071001
,依此类推。
如果您需要重启序列使用:
ALTER SEQUENCE dbo.TestSequence
RESTART WITH 1000
答案 1 :(得分:0)
您也可以使用ROW_NUMBER
SELECT
CONVERT(VARCHAR, DATEPART(yyyy,GETDATE())) +
SUBSTRING(CONVERT(VARCHAR,GETDATE(), 112), 5, 2) +
CONVERT(VARCHAR, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) + 999)
FROM
Tbl