将字符串与格式化数字组合,同时递增 1
Combining strings with formatted numbers while incrementing by one
我正在尝试用零填充@myid,但没有显示零。结果应采用这种格式(SC000290、SC000291 等)。显示的是SC290。谁能告诉我这是怎么做到的?
declare @myid int;
select @myid = 290
SELECT CONCAT('SC', FORMAT(@myid, '000000') + ROW_NUMBER() OVER(order by (select NULL))) as myid
FROM Table
问题是 row_number()
returns 和 int
所以 +
是整数加法,而不是字符串连接。所以,一直使用 concat()
:
SELECT CONCAT('SC',
FORMAT(@myid, '000000'),
ROW_NUMBER() OVER (order by (select NULL))
) as myid
FROM Table
我个人会避免使用 FORMAT
,这是一个缓慢的功能,并且在您使用的 SQL 服务器版本中不可用;正如我在评论中所说:
FORMAT
was introducted in SQL Server 2012, and you are using SQL Server 2008 (which, by the way, has been completely unsupported now for 18~ months, so long past time getting to upgrade path sorted).
相反,您可以使用 RIGHT
来获得您想要的值,这将适用于您正在使用的版本,并且在较新的版本上不会像 FORMAT
那样昂贵:
SELECT 'SC' + RIGHT(CONCAT('000000', ROW_NUMBER() OVER (ORDER BY (SELECT NULL))),6) --YOu should really use a proper column, not (SELECT NULL)
{Other Columns}
FROM dbo.YourTable;
我正在尝试用零填充@myid,但没有显示零。结果应采用这种格式(SC000290、SC000291 等)。显示的是SC290。谁能告诉我这是怎么做到的?
declare @myid int;
select @myid = 290
SELECT CONCAT('SC', FORMAT(@myid, '000000') + ROW_NUMBER() OVER(order by (select NULL))) as myid
FROM Table
问题是 row_number()
returns 和 int
所以 +
是整数加法,而不是字符串连接。所以,一直使用 concat()
:
SELECT CONCAT('SC',
FORMAT(@myid, '000000'),
ROW_NUMBER() OVER (order by (select NULL))
) as myid
FROM Table
我个人会避免使用 FORMAT
,这是一个缓慢的功能,并且在您使用的 SQL 服务器版本中不可用;正如我在评论中所说:
FORMAT
was introducted in SQL Server 2012, and you are using SQL Server 2008 (which, by the way, has been completely unsupported now for 18~ months, so long past time getting to upgrade path sorted).
相反,您可以使用 RIGHT
来获得您想要的值,这将适用于您正在使用的版本,并且在较新的版本上不会像 FORMAT
那样昂贵:
SELECT 'SC' + RIGHT(CONCAT('000000', ROW_NUMBER() OVER (ORDER BY (SELECT NULL))),6) --YOu should really use a proper column, not (SELECT NULL)
{Other Columns}
FROM dbo.YourTable;