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 path与REPLICATE函数,直接把原来的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