jp2*_*ode 111 sql t-sql sql-server string-formatting
我们有一个旧的SQL表,SQL Server 2000使用了近10年.
在这里面,我们的员工徽章号码存储为char(6)
从000001
到999999
.
我现在正在编写一个Web应用程序,我需要存储员工徽章编号.
在我的新表,我可以走捷径,并复制旧表,但是我希望有更好的数据传输,更小的尺寸等,通过简单地存储int
从价值观1
到999999
.
在C#中,我可以使用快速格式化int
徽章编号的值
public static string GetBadgeString(int badgeNum) {
return string.Format("{0:000000}", badgeNum);
// alternate
// return string.Format("{0:d6}", badgeNum);
}
Run Code Online (Sandbox Code Playgroud)
我如何修改这个简单的SQL查询以格式化返回的值?
SELECT EmployeeID
FROM dbo.RequestItems
WHERE ID=0
Run Code Online (Sandbox Code Playgroud)
如果EmployeeID
是7135,则应返回此查询007135
.
Vin*_*zzi 163
将数字6更改为您需要的总长度:
SELECT REPLICATE('0',6-LEN(EmployeeId)) + EmployeeId
Run Code Online (Sandbox Code Playgroud)
如果列是INT,则可以使用RTRIM将其隐式转换为VARCHAR
SELECT REPLICATE('0',6-LEN(RTRIM(EmployeeId))) + RTRIM(EmployeeId)
Run Code Online (Sandbox Code Playgroud)
以及删除这些0并获取"真实"数字的代码:
SELECT RIGHT(EmployeeId,(LEN(EmployeeId) - PATINDEX('%[^0]%',EmployeeId)) + 1)
Run Code Online (Sandbox Code Playgroud)
小智 110
只需使用FORMAT功能(适用于SQL Server 2012或更高版本):
SELECT FORMAT(EmployeeID, '000000')
FROM dbo.RequestItems
WHERE ID=0
Run Code Online (Sandbox Code Playgroud)
参考:http://msdn.microsoft.com/en-us/library/hh213505.aspx
Ste*_*eve 31
您可以通过这种方式更改您的程序
SELECT Right('000000' + CONVERT(NVARCHAR, EmployeeID), 6) AS EmpIDText,
EmployeeID
FROM dbo.RequestItems
WHERE ID=0
Run Code Online (Sandbox Code Playgroud)
但是,这假设您EmployeeID
是一个数值,并且此代码将结果更改为字符串,我建议再次添加原始数值
编辑当然,我没有仔细阅读上述问题.它表示该字段是char(6)
如此,因此EmployeeID不是数值.虽然这个答案本身仍然有价值,但它不是上述问题的正确答案.
Jef*_*hol 26
讨厌必须CONVERT int,这似乎更简单.甚至可能表现更好,因为只有一个字符串转换和简单的添加.
选择RIGHT(1000000 + EmployeeId,6)......
只需确保"1000000"至少具有所需大小的零.
小智 9
从 2012 版开始,您可以使用
SELECT FORMAT(EmployeeID,'000000')
FROM dbo.RequestItems
WHERE ID=0
Run Code Online (Sandbox Code Playgroud)
我在一个地方张贴所有,所有作品为我垫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')
Run Code Online (Sandbox Code Playgroud)
另一种方式,只是为了完整性.
DECLARE @empNumber INT = 7123
SELECT STUFF('000000', 6-LEN(@empNumber)+1, LEN(@empNumber), @empNumber)
Run Code Online (Sandbox Code Playgroud)
或者,根据您的查询
SELECT STUFF('000000', 6-LEN(EmployeeID)+1, LEN(EmployeeID), EmployeeID)
AS EmployeeCode
FROM dbo.RequestItems
WHERE ID=0
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
305543 次 |
最近记录: |