通过填充SQL Server中的前导零来格式化数字
我们有一个SQL Server 2000使用了近10年的旧SQL表。
其中,我们的员工证号码存储为从000001
到999999
char(6)
。
我正在编写一个Web应用程序,我需要存储员工证件号码。
在我的新表中,我可以采取快捷方式并复制旧表,但我希望通过简单地存储从1
到999999
整数值来实现更好的数据传输,更小的尺寸等。
在C#中,我可以使用快速格式化徽章编号的int
值
public static string GetBadgeString(int badgeNum) { return string.Format("{0:000000}", badgeNum); // alternate // return string.Format("{0:d6}", badgeNum); }
我如何修改这个简单的SQL查询来格式化返回的值?
SELECT EmployeeID FROM dbo.RequestItems WHERE ID=0
如果EmployeeID
是7135,则此查询应该返回007135
。
将数字6更改为您的总长度所需的值:
SELECT REPLICATE('0',6-LEN(EmployeeId)) + EmployeeId
如果列是INT,则可以使用RTRIM将其隐式转换为VARCHAR
SELECT REPLICATE('0',6-LEN(RTRIM(EmployeeId))) + RTRIM(EmployeeId)
并删除这些0代码,并取回'真正'的数字:
SELECT RIGHT(EmployeeId,(LEN(EmployeeId) - PATINDEX('%[^0]%',EmployeeId)) + 1)
只需使用FORMAT函数(适用于SQL Server 2012或更新版本):
SELECT FORMAT(EmployeeID, '000000') FROM dbo.RequestItems WHERE ID=0
参考: http : //msdn.microsoft.com/en-us/library/hh213505.aspx
你可以用这种方式改变你的程序
SELECT Right('000000' + CONVERT(NVARCHAR, EmployeeID), 6) AS EmpIDText, EmployeeID FROM dbo.RequestItems WHERE ID=0
但是,这假设你的EmployeeID
是一个数字值,这段代码将结果更改为一个string,我build议再次添加原始数值
编辑当然,我没有仔细阅读上面的问题。 它说这个字段是一个char(6)
所以EmployeeID不是一个数字值。 虽然这个答案本身仍然是一个价值,但它不是上述问题的正确答案。
恨不得不转换整数,这似乎更简单。 因为只有一个string转换和简单的加法,所以甚至可能执行得更好。
selectRIGHT(1000000 + EmployeeId,6)…
只要确保“1000000”至less有所需的大小为零。
另一种方式,只是为了完整性。
DECLARE @empNumber INT = 7123 SELECT STUFF('000000', 6-LEN(@empNumber)+1, LEN(@empNumber), @empNumber)
或者,根据您的查询
SELECT STUFF('000000', 6-LEN(EmployeeID)+1, LEN(EmployeeID), EmployeeID) AS EmployeeCode FROM dbo.RequestItems WHERE ID=0
我张贴在一个地方,所有的作品为我填写4领先的零:)
declare @number int = 1; print right('0000' + cast(@number as varchar(4)) , 4) print right('0000' + convert(varchar(4), @number) , 4) print right(replicate('0',4) + convert(varchar(4), @number) , 4) print cast(replace(str(@number,4),' ','0')as char(4)) print format(@number,'0000')
SELECT replicate('0', 6 - len(employeeID)) + convert(varchar, employeeID) as employeeID FROM dbo.RequestItems WHERE ID=0
尽可能干净,并给variables的范围进行replace:
Select RIGHT(REPLICATE('0',6) + EmployeeID, 6) from dbo.RequestItems WHERE ID=0
从2012年开始,您可以使用
SELECT FORMAT(EmployeeID,'000000') FROM dbo.RequestItems WHERE ID=0
SELECT cast(replace(str(EmployeeID,6),' ','0')as char(6)) FROM dbo.RequestItems WHERE ID=0
对于所有Sql版本,该解决scheme适用于带有前导零的带符号/负数的数字:
DECLARE @n money = -3, @length tinyint = 15, @decimals tinyint = 0 SELECT REPLICATE('-', CHARINDEX('-', @n, 1)) + REPLACE(REPLACE(str(@n, @length, @decimals), '-', ''), ' ', '0')