如何在SQL Server中添加前导零

时间:2019-08-18 14:20:50

标签: sql-server sql-server-2012

我对SQL Server有一个疑问:如何在SQL Server中添加前三个000(零)而id不包含前导零?

CREATE TABLE [dbo].[ids]
(
     [id] [VARCHAR](50) NULL,
     [name] [VARCHAR](50) NULL
) ON [PRIMARY]
GO

INSERT INTO [dbo].[ids] ([id], [name]) VALUES (N'09', N'abc')
GO

INSERT INTO [dbo].[ids] ([id], [name]) 
VALUES (N'0098', N'de'), (N'987', N'j'), (N'00056', N'i'),
       (N'6', N'z'), (N'0908', N'u'),
       (N'99999999', N'u'), (N'7522323838483', N'i')
GO

基于上述数据,我希望输出如下:

name    | id
--------+-----------
abc     | 0009
de      | 00098
j       | 000987
i       | 00056
z       | 0006
u       | 000908
u       | 00099999999
i       | 0007522323838483

我尝试过这样:

SELECT 
    RIGHT('000' + id, 3) id, [name]
FROM 
    [dbo].[ids]

但以上查询未返回预期结果。

能否请您告诉我如何编写查询以在SQL Server中完成此任务?

3 个答案:

答案 0 :(得分:4)

您可以尝试剥离开头的零,然后将三个零连接到前面,例如

SELECT
    id,
    '000' + SUBSTRING(id, PATINDEX('%[^0]%', id + '.'), LEN(id)) AS id_out,
    name
FROM ids;

enter image description here

Demo

答案 1 :(得分:0)

另一个想法是,如果您的ID字符串是数字,则使用try_convert()

示例

add_filter('woocommerce_sale_flash', 'woo_custom_hide_sales_flash');
function woo_custom_hide_sales_flash()
{
    if ( is_user_logged_in() ) {
        return true;
    }
    return false;
}

返回

Select *
      ,NewValue = '000'+left(try_convert(bigint,id),25)
 From  ids

答案 2 :(得分:0)

您可以使用 format(),将“0”作为自定义说明符来非常简单地完成此操作。

select NOPER, FORMAT( NOPER, '000000') as NOPER_formatted
from mytable

NOPER       NOPER_formatted
----------- ------------------------------------
100         000100
101         000101
102         000102
10334       010334
10335       010335
10336       010336

欲了解更多信息,请参阅以下链接: https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-numeric-format-strings