我有一个带有 . 作为分隔符,它看起来像这样......
abc.efg.hij
Run Code Online (Sandbox Code Playgroud)
我想要一个将其转换为三列 Col1、Col2 和 Col3 的查询。我想知道最快的方法是什么。到目前为止,由于我有限的数据库经验,我还没有做得很好。我有一个功能:
CREATE FUNCTION [dbo].[split](
@delimited NVARCHAR(MAX),
@delimiter NVARCHAR(100)
) RETURNS @t TABLE (id INT IDENTITY(1,1), val NVARCHAR(MAX))
AS
BEGIN
DECLARE @xml XML
SET @xml = N'<t>' + REPLACE(@delimited,@delimiter,'</t><t>') + '</t>'
INSERT INTO @t(val)
SELECT r.value('.','varchar(MAX)') as item
FROM @xml.nodes('/t') as records(r)
RETURN
END
Run Code Online (Sandbox Code Playgroud)
这就是我现在正在做的事情,但我相信它可以做得更快,我也愿意接受明显更好的功能或用于拆分字符串的开箱即用的想法。我相信我已经运行dbo.split(Name, '.')
了三遍并且只能运行一次。
SELECT
Col1 = (SELECT Val from dbo.split(Name, '.') WHERE Id = '1'),
Col2 = (SELECT Val from dbo.split(Name, '.') WHERE Id = '2'),
Col3 = …
Run Code Online (Sandbox Code Playgroud) performance sql-server azure-sql-database functions string query-performance