我对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中完成此任务?
答案 0 :(得分:4)
您可以尝试剥离开头的零,然后将三个零连接到前面,例如
SELECT
id,
'000' + SUBSTRING(id, PATINDEX('%[^0]%', id + '.'), LEN(id)) AS id_out,
name
FROM ids;
答案 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