Bus*_*nta 3 sql sql-server sql-server-2008
我已经阅读了很多与此问题相关的帖子,但不幸的是,没有一个建议的解决方案对我有用.
我正在尝试设置一个SQL语句,该语句将在结果表中创建一个列,其格式如下:
对于每个新记录,日期+ 8位数字加1,并以前导零为前缀.
换句话说,我希望有一个包含以下格式数据的列:
2015061000000001
2015061000000002
2015061000000003
2015061000000004
2015061000000005
...
Run Code Online (Sandbox Code Playgroud)
我尝试使用row_number()以及本地变量,但我没有太多运气让这个工作.
这是我到目前为止:
declare @a int;
set @a = 1;
select
'aaa',
(select (CONVERT(VARCHAR(10),GETDATE(),112)) + RIGHT('0000000'+ CONVERT(VARCHAR,2),8)),
row_number() over(order by id),
(select (CONVERT(VARCHAR(10),GETDATE(),112)) + RIGHT('0000000'+ CONVERT(VARCHAR, ( row_number() over(order by id) )),8)),
(select (CONVERT(VARCHAR(10),GETDATE(),112)) + RIGHT('0000000'+ CONVERT(VARCHAR, ( select @a + 1 )),8))
FROM MY_TABLE
Run Code Online (Sandbox Code Playgroud)
结果表:
aaa | 2015061000000002 | 1 | 2015061000000001 | 2015061000000002
aaa | 2015061000000002 | 2 | 2015061000000001 | 2015061000000002
aaa | 2015061000000002 | 3 | 2015061000000001 | 2015061000000002
aaa | 2015061000000002 | 4 | 2015061000000001 | 2015061000000002
aaa | 2015061000000002 | 5 | 2015061000000001 | 2015061000000002
aaa | 2015061000000002 | 6 | 2015061000000001 | 2015061000000002
aaa | 2015061000000002 | 7 | 2015061000000001 | 2015061000000002
aaa | 2015061000000002 | 8 | 2015061000000001 | 2015061000000002
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议如何归还这个?
2015061000000001
2015061000000002
2015061000000003
2015061000000004
2015061000000005
...
Run Code Online (Sandbox Code Playgroud)
谢谢!
你走在正确的道路上,只需要一点推动......
试试这个:
SELECT CONVERT(varchar(10), GETDATE(), 112) +
RIGHT('0000000'+
CAST( ROW_NUMBER() OVER(ORDER BY t_Id) As varchar(8))
,8)
FROM MY_TABLE
Run Code Online (Sandbox Code Playgroud)
试试这个:
SELECT
'aaa',
CONVERT(VARCHAR(10),GETDATE(),112) +
RIGHT('0000000' + CAST(ROW_NUMBER() OVER (ORDER BY id) AS VARCHAR(8)), 8)
FROM yourTable
Run Code Online (Sandbox Code Playgroud)
将结果ROW_NUMBER与7 '0'秒连接,以确保您始终至少有 8位数,然后从最右边的数字开始精确选择8位数.
| 归档时间: |
|
| 查看次数: |
252 次 |
| 最近记录: |