原資料
ID NAME
69213582,656656666645,13456,69010275015 測驗文本
39213582.6566566635:134569,6901027501578 測驗文本
想要的結果
ID NAME
69213582 測驗文本
656656666645 測驗文本
13456 測驗文本
69010275015 測驗文本
39213582 測驗文本
6566566635 測驗文本
134569 測驗文本
6901027501578 測驗文本
uj5u.com熱心網友回復:
SQLSERVER版本在2012及以上可以使用STRING_SPLIT函式,如果沒有需要自己寫一個--測驗資料
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([ID] nvarchar(60),[NAME] nvarchar(24))
Insert #T
select N'69213582,656656666645,13456,69010275015',N'測驗文本' union all
select N'39213582.6566566635:134569,6901027501578',N'測驗文本'
Go
--測驗資料結束
SELECT tt.value,
NAME
FROM #T
CROSS APPLY
(SELECT * FROM STRING_SPLIT(ID, ',') t) tt;
uj5u.com熱心網友回復:
USE tempdb
GO
IF OBJECT_ID('dbo.[t]') IS NOT NULL
DROP TABLE dbo.[t]
GO
CREATE TABLE dbo.[t](
[ID] NVARCHAR(100)
,[NAME] NVARCHAR(20)
)
GO
SET NOCOUNT ON
INSERT INTO dbo.[t] VALUES(N'69213582,656656666645,13456,69010275015',N'測驗文本')
INSERT INTO dbo.[t] VALUES(N'39213582.6566566635:134569,6901027501578',N'測驗文本')
---- 以上為測驗表及測驗資料 ----
GO
IF OBJECT_ID('[dbo].[Fun_Split]') IS NOT NULL
DROP FUNCTION [dbo].[Fun_Split]
GO
-- =============================================
-- Author : yenange
-- Create date: 2014-03-04
-- Description: 切分字串
-- Example : SELECT * FROM [dbo].[Fun_Split]('a,b,d,c',',')
-- =============================================
CREATE FUNCTION [dbo].[Fun_Split]
(
@str NVARCHAR(MAX),
@separator NVARCHAR(MAX)
)
RETURNS TABLE
AS
RETURN
(
SELECT ROW_NUMBER() OVER (order by (select 0)) AS rowNum, B.id
FROM (
SELECT [value] = CONVERT(XML, '<v>' + REPLACE(@str, @separator, '</v><v>') + '</v>')
) A
OUTER APPLY(
SELECT id = N.v.value('.', 'nvarchar(max)')
FROM A.[value].nodes('/v') N(v)
) B
WHERE ISNULL(B.id,'')!=''
)
GO
--查詢
SELECT f.id AS ID,t.NAME
FROM t CROSS APPLY dbo.Fun_Split(REPLACE(REPLACE(ID,'.',','),':',',') ,',') AS f

uj5u.com熱心網友回復:
謝謝uj5u.com熱心網友回復:
謝謝你,正是我想要的
uj5u.com熱心網友回復:
我覺得這個借助spt_values的例子非常適合你,請參考!當然上面其它同學,也說的非常好
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/8388.html
標籤:基礎類
上一篇:latex
下一篇:視圖和臨時表哪個查詢效率高?
