Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 始终包括最右边的6位数字,但如果它们不是';t前导零?_Sql_Sql Server - Fatal编程技术网

Sql 始终包括最右边的6位数字,但如果它们不是';t前导零?

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

这听起来可能是一个奇怪的要求,但我必须制作一个excel表格,格式与旧表格完全相同。相关列中的值将是数字代码。我需要显示多达8位数字,不少于6位。如果序列中的第一个数字不是零,则代码将仅为7或8位。如果有6位或更少,我需要显示6位数字,包括前导零。以下是一个例子:

数据如下所示:

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;