ALTER FUNCTION dbo.f_splite
(
@s VARCHAR(8000) , --待分拆的字串
@split VARCHAR(10) --資料分隔符
)
RETURNS @re TABLE (id INT,col VARCHAR(100) )
AS
BEGIN
DECLARE @splitlen INT
DECLARE @i INT = 1
SET @splitlen = LEN(@split + 'a') - 2
WHILE CHARINDEX(@split, @s) > 0
BEGIN
INSERT @re
VALUES ( @i,LEFT(@s, CHARINDEX(@split, @s) - 1) )
SET @s = STUFF(@s, 1, CHARINDEX(@split, @s) + @splitlen, '')
SET @i = @i +1
END
INSERT @re
VALUES ( @i,@s )
RETURN
END
GO
--測驗資料
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([id] int,[mation] nvarchar(79))
Insert #T
select 42,N'測驗張三[Auth:BASIC:1,ADMIN:SAME_ACCOUNT_ID:0,CUSTOMER:BASEC:1]' union all
select 49,N'李四測驗[Customer:SAME_Account_id:1]'
Go
--測驗資料結束
SELECT #T.id,REPLACE(t.col,':',',') AS [mation]
FROM #T
CROSS APPLY ( SELECT *
FROM dbo.f_splite(
SUBSTRING(
mation, CHARINDEX('[', mation) + 1, CHARINDEX(']', mation) - CHARINDEX('[', mation) - 1),
',') ) t;
WITH t AS (SELECT a.id,
b.VALUE,
b.seq,
b.seq2
FROM @t a
CROSS APPLY(SELECT y.VALUE,
x.id AS seq,
y.seq2
FROM dbo.Split(
SUBSTRING(
a.context, CHARINDEX('[', a.context) + 1,
LEN(a.context) - CHARINDEX('[', a.context) - 1), ',') x
CROSS APPLY(SELECT VALUE, id AS seq2 FROM dbo.Split(x.VALUE, ':') )y )b )
SELECT id,
(SELECT MAX(b.VALUE) FROM t b
WHERE a.id = b.id AND a.seq = b.seq AND b.seq2 = 1) '1',
(SELECT MAX(b.VALUE) FROM t b
WHERE a.id = b.id AND a.seq = b.seq AND b.seq2 = 2) '2',
(SELECT MAX(b.VALUE) FROM t b
WHERE a.id = b.id AND a.seq = b.seq AND b.seq2 = 3) '3'
FROM t a
GROUP BY id,
a.seq;
uj5u.com熱心網友回復:
最后的查詢也可用PIVOT來轉換行列,也是一樣的:
SELECT p.id, p.[3], p.[2], p.[1] from (SELECT a.id,
b.VALUE,
b.seq,
b.seq2
FROM @t a
CROSS APPLY(SELECT y.VALUE,
x.id AS seq,
y.seq2
FROM dbo.Split(
SUBSTRING(
a.context, CHARINDEX('[', a.context) + 1,
LEN(a.context) - CHARINDEX('[', a.context) - 1), ',') x
CROSS APPLY(SELECT VALUE, id AS seq2 FROM dbo.Split(x.VALUE, ':') )y )b ) t
PIVOT (MAX(t.VALUE) FOR seq2 IN ([1],[2],[3])) p
ORDER BY id,p.seq
uj5u.com熱心網友回復:
大哥CROSS APPLY ( 這個后面提示語法錯誤
uj5u.com熱心網友回復:
emmm 請問資料庫版本多少 我這報 substring( 附近語法錯誤
uj5u.com熱心網友回復:
請問就是必須參考 自定義函式嘍
uj5u.com熱心網友回復:
提示什么錯誤?
uj5u.com熱心網友回復:
最后的查詢也可用PIVOT來轉換行列,也是一樣的:
SELECT p.id, p.[3], p.[2], p.[1] from (SELECT a.id,
b.VALUE,
b.seq,
b.seq2
FROM @t a
CROSS APPLY(SELECT y.VALUE,
x.id AS seq,
y.seq2
FROM dbo.Split(
SUBSTRING(
a.context, CHARINDEX('[', a.context) + 1,
LEN(a.context) - CHARINDEX('[', a.context) - 1), ',') x
CROSS APPLY(SELECT VALUE, id AS seq2 FROM dbo.Split(x.VALUE, ':') )y )b ) t
PIVOT (MAX(t.VALUE) FOR seq2 IN ([1],[2],[3])) p
ORDER BY id,p.seq
請問就是必須參考 自定義函式嘍
最新版本系統自帶有個string_split函式,可以不用自定義
uj5u.com熱心網友回復:
建立函式
ALTER FUNCTION dbo.f_splite
(
@s VARCHAR(8000) , --待分拆的字串
@split VARCHAR(10) --資料分隔符
)
RETURNS @re TABLE (id INT,col VARCHAR(100) )
AS
BEGIN
DECLARE @splitlen INT
DECLARE @i INT = 1
SET @splitlen = LEN(@split + 'a') - 2
WHILE CHARINDEX(@split, @s) > 0
BEGIN
INSERT @re
VALUES ( @i,LEFT(@s, CHARINDEX(@split, @s) - 1) )
SET @s = STUFF(@s, 1, CHARINDEX(@split, @s) + @splitlen, '')
SET @i = @i +1
END
INSERT @re
VALUES ( @i,@s )
RETURN
END
GO
--測驗資料
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([id] int,[mation] nvarchar(79))
Insert #T
select 42,N'測驗張三[Auth:BASIC:1,ADMIN:SAME_ACCOUNT_ID:0,CUSTOMER:BASEC:1]' union all
select 49,N'李四測驗[Customer:SAME_Account_id:1]'
Go
--測驗資料結束
SELECT #T.id,REPLACE(t.col,':',',') AS [mation]
FROM #T
CROSS APPLY ( SELECT *
FROM dbo.f_splite(
SUBSTRING(
mation, CHARINDEX('[', mation) + 1, CHARINDEX(']', mation) - CHARINDEX('[', mation) - 1),
',') ) t;
大哥CROSS APPLY ( 這個后面提示語法錯誤
提示什么錯誤?
建立函式
ALTER FUNCTION dbo.f_splite
(
@s VARCHAR(8000) , --待分拆的字串
@split VARCHAR(10) --資料分隔符
)
RETURNS @re TABLE (id INT,col VARCHAR(100) )
AS
BEGIN
DECLARE @splitlen INT
DECLARE @i INT = 1
SET @splitlen = LEN(@split + 'a') - 2
WHILE CHARINDEX(@split, @s) > 0
BEGIN
INSERT @re
VALUES ( @i,LEFT(@s, CHARINDEX(@split, @s) - 1) )
SET @s = STUFF(@s, 1, CHARINDEX(@split, @s) + @splitlen, '')
SET @i = @i +1
END
INSERT @re
VALUES ( @i,@s )
RETURN
END
GO
--測驗資料
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([id] int,[mation] nvarchar(79))
Insert #T
select 42,N'測驗張三[Auth:BASIC:1,ADMIN:SAME_ACCOUNT_ID:0,CUSTOMER:BASEC:1]' union all
select 49,N'李四測驗[Customer:SAME_Account_id:1]'
Go
--測驗資料結束
SELECT #T.id,REPLACE(t.col,':',',') AS [mation]
FROM #T
CROSS APPLY ( SELECT *
FROM dbo.f_splite(
SUBSTRING(
mation, CHARINDEX('[', mation) + 1, CHARINDEX(']', mation) - CHARINDEX('[', mation) - 1),
',') ) t;
大哥CROSS APPLY ( 這個后面提示語法錯誤
提示什么錯誤?
老哥您看下 SQL2008版本
uj5u.com熱心網友回復:
最后的查詢也可用PIVOT來轉換行列,也是一樣的:
SELECT p.id, p.[3], p.[2], p.[1] from (SELECT a.id,
b.VALUE,
b.seq,
b.seq2
FROM @t a
CROSS APPLY(SELECT y.VALUE,
x.id AS seq,
y.seq2
FROM dbo.Split(
SUBSTRING(
a.context, CHARINDEX('[', a.context) + 1,
LEN(a.context) - CHARINDEX('[', a.context) - 1), ',') x
CROSS APPLY(SELECT VALUE, id AS seq2 FROM dbo.Split(x.VALUE, ':') )y )b ) t
PIVOT (MAX(t.VALUE) FOR seq2 IN ([1],[2],[3])) p
ORDER BY id,p.seq
請問就是必須參考 自定義函式嘍
最新版本系統自帶有個string_split函式,可以不用自定義
SUBSTRING( 也是語法錯誤 類似樓上 只是行不同
uj5u.com熱心網友回復:
建立函式
ALTER FUNCTION dbo.f_splite
(
@s VARCHAR(8000) , --待分拆的字串
@split VARCHAR(10) --資料分隔符
)
RETURNS @re TABLE (id INT,col VARCHAR(100) )
AS
BEGIN
DECLARE @splitlen INT
DECLARE @i INT = 1
SET @splitlen = LEN(@split + 'a') - 2
WHILE CHARINDEX(@split, @s) > 0
BEGIN
INSERT @re
VALUES ( @i,LEFT(@s, CHARINDEX(@split, @s) - 1) )
SET @s = STUFF(@s, 1, CHARINDEX(@split, @s) + @splitlen, '')
SET @i = @i +1
END
INSERT @re
VALUES ( @i,@s )
RETURN
END
GO
--測驗資料
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([id] int,[mation] nvarchar(79))
Insert #T
select 42,N'測驗張三[Auth:BASIC:1,ADMIN:SAME_ACCOUNT_ID:0,CUSTOMER:BASEC:1]' union all
select 49,N'李四測驗[Customer:SAME_Account_id:1]'
Go
--測驗資料結束
SELECT #T.id,REPLACE(t.col,':',',') AS [mation]
FROM #T
CROSS APPLY ( SELECT *
FROM dbo.f_splite(
SUBSTRING(
mation, CHARINDEX('[', mation) + 1, CHARINDEX(']', mation) - CHARINDEX('[', mation) - 1),
',') ) t;
大哥CROSS APPLY ( 這個后面提示語法錯誤
提示什么錯誤?
建立函式
ALTER FUNCTION dbo.f_splite
(
@s VARCHAR(8000) , --待分拆的字串
@split VARCHAR(10) --資料分隔符
)
RETURNS @re TABLE (id INT,col VARCHAR(100) )
AS
BEGIN
DECLARE @splitlen INT
DECLARE @i INT = 1
SET @splitlen = LEN(@split + 'a') - 2
WHILE CHARINDEX(@split, @s) > 0
BEGIN
INSERT @re
VALUES ( @i,LEFT(@s, CHARINDEX(@split, @s) - 1) )
SET @s = STUFF(@s, 1, CHARINDEX(@split, @s) + @splitlen, '')
SET @i = @i +1
END
INSERT @re
VALUES ( @i,@s )
RETURN
END
GO
--測驗資料
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([id] int,[mation] nvarchar(79))
Insert #T
select 42,N'測驗張三[Auth:BASIC:1,ADMIN:SAME_ACCOUNT_ID:0,CUSTOMER:BASEC:1]' union all
select 49,N'李四測驗[Customer:SAME_Account_id:1]'
Go
--測驗資料結束
SELECT #T.id,REPLACE(t.col,':',',') AS [mation]
FROM #T
CROSS APPLY ( SELECT *
FROM dbo.f_splite(
SUBSTRING(
mation, CHARINDEX('[', mation) + 1, CHARINDEX(']', mation) - CHARINDEX('[', mation) - 1),
',') ) t;
大哥CROSS APPLY ( 這個后面提示語法錯誤
提示什么錯誤?
老哥您看下 SQL2008版本
函式建了嗎
uj5u.com熱心網友回復:
SQL Server2008也是支持Cross Apply的,你的自定義函式確定建立了?
uj5u.com熱心網友回復:
看看這個資料庫的兼容性是多少
uj5u.com熱心網友回復:
建立函式
ALTER FUNCTION dbo.f_splite
(
@s VARCHAR(8000) , --待分拆的字串
@split VARCHAR(10) --資料分隔符
)
RETURNS @re TABLE (id INT,col VARCHAR(100) )
AS
BEGIN
DECLARE @splitlen INT
DECLARE @i INT = 1
SET @splitlen = LEN(@split + 'a') - 2
WHILE CHARINDEX(@split, @s) > 0
BEGIN
INSERT @re
VALUES ( @i,LEFT(@s, CHARINDEX(@split, @s) - 1) )
SET @s = STUFF(@s, 1, CHARINDEX(@split, @s) + @splitlen, '')
SET @i = @i +1
END
INSERT @re
VALUES ( @i,@s )
RETURN
END
GO
--測驗資料
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([id] int,[mation] nvarchar(79))
Insert #T
select 42,N'測驗張三[Auth:BASIC:1,ADMIN:SAME_ACCOUNT_ID:0,CUSTOMER:BASEC:1]' union all
select 49,N'李四測驗[Customer:SAME_Account_id:1]'
Go
--測驗資料結束
SELECT #T.id,REPLACE(t.col,':',',') AS [mation]
FROM #T
CROSS APPLY ( SELECT *
FROM dbo.f_splite(
SUBSTRING(
mation, CHARINDEX('[', mation) + 1, CHARINDEX(']', mation) - CHARINDEX('[', mation) - 1),
',') ) t;
大哥CROSS APPLY ( 這個后面提示語法錯誤
提示什么錯誤?
建立函式
ALTER FUNCTION dbo.f_splite
(
@s VARCHAR(8000) , --待分拆的字串
@split VARCHAR(10) --資料分隔符
)
RETURNS @re TABLE (id INT,col VARCHAR(100) )
AS
BEGIN
DECLARE @splitlen INT
DECLARE @i INT = 1
SET @splitlen = LEN(@split + 'a') - 2
WHILE CHARINDEX(@split, @s) > 0
BEGIN
INSERT @re
VALUES ( @i,LEFT(@s, CHARINDEX(@split, @s) - 1) )
SET @s = STUFF(@s, 1, CHARINDEX(@split, @s) + @splitlen, '')
SET @i = @i +1
END
INSERT @re
VALUES ( @i,@s )
RETURN
END
GO
--測驗資料
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([id] int,[mation] nvarchar(79))
Insert #T
select 42,N'測驗張三[Auth:BASIC:1,ADMIN:SAME_ACCOUNT_ID:0,CUSTOMER:BASEC:1]' union all
select 49,N'李四測驗[Customer:SAME_Account_id:1]'
Go
--測驗資料結束
SELECT #T.id,REPLACE(t.col,':',',') AS [mation]
FROM #T
CROSS APPLY ( SELECT *
FROM dbo.f_splite(
SUBSTRING(
mation, CHARINDEX('[', mation) + 1, CHARINDEX(']', mation) - CHARINDEX('[', mation) - 1),
',') ) t;
**桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......
我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......
關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......