新手求解。。
例如我现在有一个列
fNumber
DN
DN.TS
DN.BJB
DN.TS.ZJ
DN.TS.ZJ.ZB
这样子
然后我想新建一个列 fLevel
变成
fNumber fLevel
DN 1
DN.TS 2
DN.BJB 2
DN.TS.ZJ 3
DN.TS.ZJ.ZB 4
可以理解为根据.来判断
所以我想请教下
要怎么写 才可以自动生成?谢谢了
在线等
[最优解释]
IF OBJECT_ID('tempdb.dbo.#Ta') IS NOT NULL
DROP TABLE #Ta
CREATE TABLE #Ta(fNumber varchar(16))
INSERT INTO #Ta(fNumber)
SELECT 'DN' UNION ALL
SELECT 'DN.TS' UNION ALL
SELECT 'DN.BJB' UNION ALL
SELECT 'DN.TS.ZJ' UNION ALL
SELECT 'DN.TS.ZJ.ZB'
select *,(select COUNT(*)+1 from master..spt_values
WHERE type='P'
and SUBSTRING(fNumber,number,1)='.')
from #ta aIF OBJECT_ID('tempdb.dbo.#Ta') IS NOT NULL
DROP TABLE #Ta
CREATE TABLE #Ta(fNumber varchar(16))
INSERT INTO #Ta(fNumber)
SELECT 'DN' UNION ALL
SELECT 'DN.TS' UNION ALL
SELECT 'DN.BJB' UNION ALL
SELECT 'DN.TS.ZJ' UNION ALL
SELECT 'DN.TS.ZJ.ZB'
select *,(select COUNT(*)+1 from master..spt_values
WHERE type='P' and LEN(a.fNumber)>=number
and SUBSTRING(fNumber,number,1)='.')
from #ta a
IF OBJECT_ID('tempdb.dbo.#Ta') IS NOT NULL
DROP TABLE #Ta
CREATE TABLE #Ta(fNumber varchar(16))
INSERT INTO #Ta(fNumber)
SELECT 'DN' UNION ALL
SELECT 'DN.TS' UNION ALL
SELECT 'DN.BJB' UNION ALL
SELECT 'DN.TS.ZJ' UNION ALL
SELECT 'DN.TS.ZJ.ZB'
ALTER TABLE #Ta ADD fLevel int
UPDATE #Ta
SET fLevel = LEN(fNumber) - LEN(REPLACE(fNumber,'.','')) + 1
SELECT * FROM #Ta
fNumber fLevel
---------------- -----------
DN 1
DN.TS 2
DN.BJB 2
DN.TS.ZJ 3
DN.TS.ZJ.ZB 4
(5 行受影响)
SELECT *,len(fnumber)-len(replace(fnumber,'.',''))+1 as flevel FROM #ta