且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

SQL Server表中的定界符

更新时间:2023-01-31 21:27:48

DECLARE @Table1 AS TABLE(rwid bigint ,val  NVARCHAR(MAX))
DECLARE @coun as bigint
DECLARE @x as bigint
DECLARE @Table2 AS TABLE(rwid bigint identity(1,1),column1 NVARCHAR(255),column2 NVARCHAR(255),column3 NVARCHAR(255),column4 NVARCHAR(255))
DECLARE @col1 AS NVARCHAR(255)
DECLARE @col2 AS NVARCHAR(255)
DECLARE @col3 AS NVARCHAR(255)
DECLARE @Col4 AS NVARCHAR(255)
DECLARE @nextlevelQuilifier as bigint
DECLARE @Status AS NVARCHAR(50)

SET @x=1
SET @nextlevelQuilifier=1

INSERT INTO @Table1 
SELECT 1,'All Values'
Union
SELECT 2,'#Loans'
Union
SELECT 3,'##Revolving'
Union
SELECT 4,'###Credit Cards'

  

SELECT @coun=COUNT(*) FROM @Table1
 
While @coun >= @x
 Begin
        SELECT @nextlevelQuilifier=[dbo].[ufn_CountChar](val,'#') FROM @Table1 WHERE rwid=@x 
   		
		IF  @nextlevelQuilifier=0 
			BEGIN
				SELECT @col1= REPLACE(Val,'#','') FROM  @Table1 WHERE rwid=@x 
				INSERT INTO @Table2(column1,column2,column3,column4) 
				SELECT @col1 ,'','' ,''				
			END

		ELSE IF  @nextlevelQuilifier=1
			BEGIN
				SELECT @col2= REPLACE(Val,'#','') FROM  @Table1 WHERE rwid=@x 
				INSERT INTO @Table2 (column1,column2,column3,column4)
				SELECT '' ,@col2 ,'' ,'' 
			END

		ELSE IF  @nextlevelQuilifier=2 
			BEGIN
				SELECT @col3= REPLACE(Val,'#','') FROM  @Table1 WHERE rwid=@x 
				INSERT INTO @Table2 (column1,column2,column3,column4)
				SELECT '','',@col3 ,''
			END

		ELSE IF  @nextlevelQuilifier=3 
			BEGIN
				SELECT @col4= REPLACE(Val,'#','') FROM  @Table1 WHERE rwid=@x 
				INSERT INTO @Table2 (column1,column2,column3,column4)
				SELECT '','','',@Col4 
			END

set @x=@x+1
        	  
 End

SELECT * from @Table2 order by rwid




为此,您需要下面的函数来计算字符串中的char





For this you need below function for counting char in string


CREATE FUNCTION [dbo].[ufn_CountChar] ( @pInput VARCHAR(1000), @pSearchChar NVARCHAR(255) )
RETURNS INT
BEGIN

DECLARE @vInputLength        INT
DECLARE @vIndex              INT
DECLARE @vCount              INT

SET @vCount = 0
SET @vIndex = 1
SET @vInputLength = LEN(@pInput)

WHILE @vIndex <= @vInputLength
BEGIN
    IF SUBSTRING(@pInput, @vIndex, 1) = @pSearchChar
        SET @vCount = @vCount + 1

    SET @vIndex = @vIndex + 1
END

RETURN @vCount

END
GO




希望这对您有帮助,请接受并投票,否则请返回您的查询
--Rahul D.




Hope this helps if yes then please accept and vote the answer otherwise revert back with your queries
--Rahul D.


我知道这不是您要的,但是自从您用SQL2008标记问题以来,您是否给出过 ^ ]有什么想法吗?本文介绍了如何使用标准T-SQL手段对层次结构进行建模,然后继续演示如何使用层次结构ID来实现相同的方法.

问候,

曼弗雷德(Manfred)
I know this is not what you asked for, but since you labled your question with SQL2008 have you given Hierarchy ID[^] any thought yet? The article explains how to model a hierarchy using standard T-SQL means and then goes on to demonstrate how to implement the same using a hierarchy id.

Regards,

Manfred