补充字符串问题

aotian16 2014-11-23 09:12:06
sql如何补充字符串
例如 32 补充成 32*0*0
32*1 补充成 32*1*0


...全文
122 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2014-11-24
  • 打赏
  • 举报
回复
WITH test(s) AS (
SELECT '3' UNION ALL
SELECT '3*1' UNION ALL
SELECT '3*1*2' UNION ALL
SELECT '31' UNION ALL
SELECT '31*3' UNION ALL
SELECT '31*3*4'
)
--求出*的个数,补上 2-个数 次 '*0'
SELECT s + REPLICATE('*0',2-(LEN(s) - LEN(REPLACE(s,'*','')))) filled
FROM test

filled
----------
3*0*0
3*1*0
3*1*2
31*0*0
31*3*0
31*3*4
中国风 2014-11-24
  • 打赏
  • 举报
回复
USE tempdb
GO

DECLARE @T TABLE(Col1 VARCHAR(10))
INSERT @T 
        ( Col1 )
VALUES  ( '32')  ,('32*1')

SELECT  CASE LEN(Col1) - LEN(REPLACE(Col1, '*', '')) 
			WHEN 0 THEN Col1+'*0*0'
			WHEN 1 THEN Col1+'*0'
			ELSE Col1 END AS Col1			
FROM    @T

/*
Col1
32*0*0
32*1*0
*/
lzw_0736 2014-11-24
  • 打赏
  • 举报
回复

DECLARE @STR VARCHAR(50)
SET @STR='399'
--SET @STR='399*3'
--SET @STR='399*3*9'
SELECT 
CASE 
WHEN CHARINDEX('*',@STR)=0 THEN @STR+'*0*0'
WHEN CHARINDEX('*',right(@STR,LEN(@STR)-CHARINDEX('*',@STR)))=0 THEN @STR+'*0'
ELSE @STR
END
还在加载中灬 2014-11-24
  • 打赏
  • 举报
回复
ALTER FUNCTION FUN(@STR VARCHAR(100))
	RETURNS VARCHAR(100)
AS
BEGIN
	DECLARE @C INT,@INDEX INT,@INDEX2 INT
	SET @C=1
	SET @INDEX=CHARINDEX('*',@STR)
	WHILE @C<=2
	BEGIN 
		IF @INDEX=0
		BEGIN
			SET @STR=@STR+'*0'
			SET @INDEX2=LEN(@STR)
		END
		ELSE
			SET @INDEX2=@INDEX
		SET @INDEX=CHARINDEX('*',@STR,@INDEX2+1)
		SET @C=@C+1
	END
	RETURN @STR
END
更正一下~~
还在加载中灬 2014-11-24
  • 打赏
  • 举报
回复
既然这样,考虑用自定函数不~
CREATE FUNCTION FUN(@STR VARCHAR(10))
	RETURNS VARCHAR(20)
AS
BEGIN
	DECLARE @C INT,@INDEX INT
	SET @C=1
	SET @INDEX=CHARINDEX('*',@STR)
	WHILE @C<=3
	BEGIN 
		IF @INDEX=0
			SET @STR=@STR+'*0'
		SET @INDEX=CHARINDEX('*',@STR,@INDEX+1)
		SET @C=@C+1
	END
	RETURN @STR
END
然后,试下效果
SELECT DBO.FUN(COL)FROM
(SELECT '32'COL
UNION ALL SELECT '32*1'
UNION ALL SELECT '1')T
aotian16 2014-11-23
  • 打赏
  • 举报
回复
[quote=引用 1 楼 wd_318 的回复:] declare @str varchar(6) set @str='32*1' select @str+RIGHT('*0*0*0',6-LEN(@str)) 方法很好,但是有个问题,长度不能确定下来, 比如@str = '1' 执行出来结果是 10*0*0
无涯大者 2014-11-23
  • 打赏
  • 举报
回复
引用 楼主 aotian16 的回复:
sql如何补充字符串 例如 32 补充成 32*0*0 32*1 补充成 32*1*0
补充成以*分割开,三个数,后面补零吗?2楼的方法实现的不错!!
wd_318 2014-11-23
  • 打赏
  • 举报
回复
declare @str varchar(6) set @str='32*1' select @str+RIGHT('*0*0*0',6-LEN(@str)) 不知道我有没有理解正确?

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧