SQL SERVER REPLICATE函数(将一个字符串重复出现次数很有用,好比五星好评)

本文深入探讨了SQL中REPLICATE函数的运用,通过实例展示了如何利用该函数生成重复的字符串,特别是在处理星级评价和复杂数据转换场景中的应用。文章还提供了一段脚本示例,展示如何结合FOR XML PATH和REPLICATE函数简化代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SQL REPLICATE函数网上相关介绍与运用比较少,但我觉得必要的时候很好用,得心应手。。。。

百度百科是这么说的:

REPLICATE (Transact-SQL) 将字串值重复指定的次数

使用方法

REPLICATE ( string_expression ,integer_expression )

REPLICATE(字符串,重复的次数)

说明:

返回字符的长度仅受内存的限制,只要内存足够,可以任意长的字符串。

示例:

REPLICATE('重复',3)

输出结果为:

重复重复重复

【值得注意的是当 integer_expression 值为负值,则返回NULL 】

 


/*******************************************
 * #haoping 创建“好评”临时表
 * leixing 新建好评“类型”字段1
 * fenshu 新建好评“分数”字段2
 *******************************************/

CREATE TABLE #haoping(leixing NVARCHAR(30),fenshu INT)

INSERT INTO #haoping VALUES (N'物流',4)
INSERT INTO #haoping VALUES (N'描述',5)
INSERT INTO #haoping VALUES (N'客服',3)

SELECT * FROM #haoping (NOLOCK)

SELECT leixing AS 类型,REPLICATE(N'★',fenshu) AS 星级 FROM #haoping (NOLOCK)

--下面是简单示意1:
---------------------------------------------
SELECT REPLICATE(N'★',3) AS 星级
SELECT REPLICATE(N'★',4) AS 星级
SELECT REPLICATE(N'★',5) AS 星级
--下面是简单示意2:
---------------------------------------------
SELECT '3' AS 评分, REPLICATE(N'★',3) AS 星级
UNION
SELECT '4' AS 评分, REPLICATE(N'★',4) AS 星级
UNION
SELECT '5' AS 评分, REPLICATE(N'★',5) AS 星级

下面这张函数脚本是我自己上传到CSDN的笔记,对其他看官没有参考价值,仅我个人笔录而已,因为去年4月23日使用过,我都快忘了。

(结合for xml pathREPLICATE函数,直接把原来的40多行代码精简到10来行)

/****** Object:  UserDefinedFunction [dbo].[fn_GetPACodebyWO]    Script Date: 2019/2/15 17:01:36 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO






ALTER         FUNCTION [dbo].[fn_GetPACodebyWO]
(
	@strWO varchar(30) = ''
)

RETURNS varchar(200)
AS  
BEGIN
	DECLARE @m_bResult	varchar(200)
	DECLARE @m_Partno	VARCHAR(20)

	SET @m_bResult =''	
	SET @m_Partno = ''
	

		
/******************************************* remark by jway 2018/04/23 begin

--/*
--    declare roy  cursor local SCROLL
--    for
--	SELECT   dbo.fn_trim(partno) FROM mfworkdetail (NOLOCK)
--	WHERE workorderno IN (SELECT workorderno FROM mfworkstatus (NOLOCK) WHERE sysserialno=@strWO)
--	AND categoryname = @m_CartonCategory ORDER BY partno
	
--    open roy
--    fetch next from roy into @m_Partno
--    while @@fetch_status=0
--    begin
--		IF @m_Partno<>''
--			SET @m_bResult=@m_bResult+'|'+@m_Partno
--        fetch next from  roy into @m_Partno
--    end
--    close roy
--    deallocate roy
--    */
--		DECLARE Part_cursor CURSOR LOCAL FAST_FORWARD FOR
--		SELECT  partno FROM mfworkdetail (NOLOCK) WHERE workorderno=@strWO AND categoryname = 'MGPEV' ORDER BY partno
--		OPEN Part_cursor 

--		FETCH NEXT FROM Part_cursor 
--		INTO @m_Partno		WHILE @@FETCH_STATUS = 0
--		BEGIN
--			IF @m_Partno<>''
--				SET @m_bResult=@m_bResult+'|'+LTRIM(RTRIM(@m_Partno))
--			FETCH NEXT FROM Part_cursor
--			INTO @m_Partno
--		END
--		CLOSE Part_cursor 
--		DEALLOCATE Part_cursor

--	/*	
--	IF @m_bResult<>''
--		SET @m_bResult=@m_bResult+'|'
--	RETURN @m_bResult
--	*/
	
--	--UPDATE  by jway 2017/08/17 begin
--	IF @m_bResult<>''
--	SET @m_bResult=@m_bResult+'|'
--	IF @m_bResult=''
--	SET @m_bResult=null
--	RETURN @m_bResult
--	--UPDATE  by jway 2017/08/17 end
	
 *******************************************/--remark by jway 2018/04/23 end
 
 	--update get PA code by jway 2018/04/23 begin
	SELECT 
	@m_bResult=
	'|'+REPLACE(STUFF((SELECT ''+ REPLACE(REPLICATE('|'+partno+'|',(CASE WHEN originalqty<=1 THEN 1 ELSE originalqty END)),'||','|')
	 FROM mfworkdetail (NOLOCK) WHERE workorderno=@strWO AND categoryname = 'MGPEV'  for xml path('')),1,1,''),'||','|')
		 
	IF @m_bResult<>''
	BEGIN
	SET @m_bResult=@m_bResult
	END
	ELSE
	BEGIN
	SET @m_bResult=null
	END
	RETURN @m_bResult
	--update get PA code by jway 2018/04/23 end
	

	
END

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值