如何在SQL Server 2008中的结果表中增加和格式化整数?

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)

谢谢!

Zoh*_*led 6

你走在正确的道路上,只需要一点推动......
试试这个:

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)


Gio*_*sos 5

试试这个:

  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位数.