只有在逗号3次出现在sql中后才能拆分。 我有一个看起来像这样的字符串
"abc,123,855,jkl,ddd,rrr,sss,999,777,kkk,jkl,ddd,rrr,sss,999"
从db获取此信息。 我想要返回的是一个字符串[],它在每三个逗号之后被拆分,所以它看起来像这样:
abc,123,855,
jkl,ddd,rrr,
sss,999,777,
kkk,jkl,ddd,
rrr,sss,999
需要在我的JSP页面中显示此字段,目前它占用了表行的更多空间。 非常感谢我能得到的任何帮助!
答案 0 :(得分:1)
这是完整的例子。
DECLARE @valueList varchar(8000)
DECLARE @pos INT
DECLARE @len INT
DECLARE @value varchar(8000)
SET @valueList = 'Pakistan,UAE,USA,UK,'
set @pos = 0
set @len = 0
WHILE CHARINDEX(',', @valueList, @pos+1)>0
BEGIN
set @len = CHARINDEX(',', @valueList, @pos+1) - @pos
set @value = SUBSTRING(@valueList, @pos, @len)
SELECT @pos, @len, @value
set @pos = CHARINDEX(',', @valueList, @pos+@len) +1
END
答案 1 :(得分:0)
MS SQL的解决方案。假设带有逗号的字符串在表中的列中,并且可能有更多行具有更多不同的字符串。还假设解析后剩余的最后一个字符串可能少于3个逗号。
使用两个循环,第一个循环检查是否还有要处理的行。第二个内部循环是检查是否还有剩余的字符串,并且要处理逗号。
包含逗号字符串列TableWithCommaStrings
的原始表
在这种情况下,最终表只有临时#Temp_3
,但您可以将其插入任何位置。
IF OBJECT_ID('tempdb..#Temp_1') IS NOT NULL DROP TABLE #Temp_1
SELECT *
INTO #Temp_1
FROM TableWithCommaStrings
;
DECLARE @RowCount AS INT = 1;
WHILE @RowCount >= 1
BEGIN
IF OBJECT_ID('tempdb..#Temp_2') IS NOT NULL DROP TABLE #Temp_2
SELECT TOP 1 * /* Pick Only First line */
INTO #Temp_2
FROM #Temp_1;
WITH AA AS (SELECT TOP 1 * FROM #Temp_1 ) /* Delete that first line from Temp1*/
DELETE FROM AA;
/* Parse Column till last comma character remain there*/
DECLARE @CommaCharCount AS INT = 3;
WHILE @CommaCharCount >= 3
BEGIN
IF OBJECT_ID('tempdb..#Temp_3') IS NULL CREATE TABLE #Temp_3 (YourStringColumn VARCHAR(MAX));
INSERT INTO #Temp_3 /* Insert substring into temp3 based on Third Comman from beginning*/
SELECT substring(AA.YourStringColumn,1,(CharIndex(',',AA.YourStringColumn,Charindex(',',AA.YourStringColumn,CharIndex(',',AA.YourStringColumn)+1) +1))-1)
FROM #Temp_2 AS AA
UPDATE BB /*Remove part of string which has been procssed already in step above*/
SET BB.YourStringColumn = substring(YourStringColumn,((CharIndex(',',YourStringColumn,Charindex(',',YourStringColumn,CharIndex(',',YourStringColumn)+1) +1)+1)+1),LEN(YourStringColumn))
FROM #Temp_2 AS BB
/* Set comma counter */
SELECT @CommaCharCount= LEN(YourStringColumn) - LEN(REPLACE(YourStringColumn, ',', '')) FROM #Temp_2
END
IF (SELECT LEN(YourStringColumn) FROM #Temp_2) > 0
INSERT INTO #Temp_3 /* Last remaining Characters */
SELECT YourStringColumn
FROM #Temp_2
SELECT @RowCount = COUNT(*) FROM #Temp_1;
END
答案 2 :(得分:0)
您可以使用JSTL在JSP中更轻松地完成此任务。事实上,由于您的实际需求仅仅是显示,您甚至不需要创建数组。以下是使用<c:forTokens>
JSTL标记的方法。
<c:set var="sqlString" value="abc,123,855,jkl,ddd,rrr,sss,999,777,kkk" />
<c:forTokens var="token" varStatus="tokenCounter" items="${sqlString}" delims=",">
<c:out value="${token}" />,
<c:if test="${tokenCounter.count % 3 == 0}">
<br />
</c:if>
</c:forTokens>