Sql 始终包括最右边的6位数字,但如果它们不是';t前导零?
这听起来可能是一个奇怪的要求,但我必须制作一个excel表格,格式与旧表格完全相同。相关列中的值将是数字代码。我需要显示多达8位数字,不少于6位。如果序列中的第一个数字不是零,则代码将仅为7或8位。如果有6位或更少,我需要显示6位数字,包括前导零。以下是一个例子: 数据如下所示:Sql 始终包括最右边的6位数字,但如果它们不是';t前导零?,sql,sql-server,Sql,Sql Server,这听起来可能是一个奇怪的要求,但我必须制作一个excel表格,格式与旧表格完全相同。相关列中的值将是数字代码。我需要显示多达8位数字,不少于6位。如果序列中的第一个数字不是零,则代码将仅为7或8位。如果有6位或更少,我需要显示6位数字,包括前导零。以下是一个例子: 数据如下所示: 000023547612 000000873901 000031765429 000000000941 000000055701 我需要这些数字显示为: 23547612 873901 31765429 000941
000023547612
000000873901
000031765429
000000000941
000000055701
我需要这些数字显示为:
23547612
873901
31765429
000941
055701
有没有办法在SQL语句中实现这一点?您可以检查字符串的长度,然后使用
right
填充它。但格斯伯格的答案更好
declare @Test table (Number varchar(12))
insert into @Test (Number)
values ('000023547612'),('000000873901'),('000031765429'),('000000000941'),('000000055701')
select Number
, case when len(convert(varchar(12), convert(int, Number))) <= 6 then right('000000'+convert(varchar(12), convert(int, Number)),6) else convert(varchar(12), convert(int, Number)) end
, format(convert(int, Number), N'##000000') -- GSerg's Answer
from @Test
PS:将来如果您以这种格式提供测试数据(表变量或临时表),您将使人们更容易回答。您可以使用
SELECT Substring('0078956', Patindex('%[^0 ]%', '0078956' + ' '), Len('0078956') ) AS Trimmed_Leading_0;
使用LPAD函数源列的数据类型是什么:字符串还是数字?
选择格式(数字,N'###000000',iv')
?@AlbertoSinigaglia这是MySQL,不是吗?这也不起作用。在发布答案之前检查答案是值得的。“000000000941”仍然转到“941”源列的数据类型是什么:字符串还是数字?
SELECT Substring('0078956', Patindex('%[^0 ]%', '0078956' + ' '), Len('0078956') ) AS Trimmed_Leading_0;