C#有个函数PadLeft函数:右对齐此实例中的字符,在左边用空格或指定的 Unicode 字符填充以达到指定的总长度。SQL中我们也可能有这种需求.比如字符串希望保持7位不足7位前面用0补全.
- 1 -------- 0000001
- 109 ------ 0000109
- 0987 ----- 0000987
解决方案1:使用RIGHT,REPLICATE函数
- CREATE FUNCTION dbo.PadLeft
- (
- @len int,
- @string VARCHAR(max),
- @padchar CHAR(1))
- RETURNS VARCHAR(255) AS
- BEGIN
- RETURN RIGHT(
- REPLICATE(@padchar, @len) + CONVERT (VARCHAR(MAX), @string),
- @len
- )
- END
- GO
解决方案2:使用REPLACE和SPACE函数
- CREATE FUNCTION dbo.PadLeft
- (
- @len int,
- @string VARCHAR(max),
- @padchar CHAR(1))
- RETURNS VARCHAR(255) AS
- BEGIN
- RETURN LTRIM(RTRIM(
- CASE
- WHEN LEN(@string) < @len
- THEN REPLACE(SPACE(@len - LEN(@string)), ' ', @padchar) + @string
- ELSE @string
- END
- )
- )
- END
- GO
解决方案3:使用REPLICATE和ISNULL函数
- CREATE FUNCTION dbo.PadLeft
- (
- @len int,
- @string VARCHAR(max),
- @padchar CHAR(1)
- )
- RETURNS VARCHAR(max)
- AS
- BEGIN
- RETURN ISNULL(REPLICATE(@padchar, @len - LEN(@string)), '')
- + CAST(@string AS VARCHAR)
- END
- GO
调用示例:
- select dbo.PadLeft(7,'123','0') --0000123
原载: 链接: