まず、文字列を破る:
DECLARE @separator char(1)
DECLARE @NameParts TABLE (PartId INT IDENTITY, part varchar(50))
DECLARE @Name varchar(50)
SET @separator = ' '
SET @name = 'John Smith Alexander'
;WITH Parts(pn, start, finish) AS (
SELECT 1, 1, CHARINDEX(@separator, @Name)
UNION ALL
SELECT pn + 1, finish + 1, CHARINDEX(@separator, @Name, finish + 1)
FROM Parts
WHERE finish > 0
)
INSERT INTO @NameParts(part)
SELECT SUBSTRING(@Name, start, CASE WHEN finish > 0 THEN finish-start ELSE 50 END)
FROM Parts
その後の順列を取得:TSQLではない私のデータベースのための
DECLARE @tokencount int
SELECT @tokencount = COUNT(*) FROM @NameParts
;WITH Subsets AS
(
SELECT CAST(' ' + part AS VARCHAR(MAX)) Permutation,
CAST(1 AS INT) AS Iteration
FROM @NameParts
UNION ALL
SELECT Permutation + ' ' + part AS Permutation, Iteration + 1 AS Iteration
FROM Subsets s
JOIN @NameParts n ON s.Permutation NOT LIKE '%' + n.part + '%'
)
SELECT STUFF(Permutation,1,1,'') As Perm
FROM SUBSETS
WHERE Iteration = @tokencount
フルネームに4つ以上の単語が含まれている場合、「ミドルネームルール」は、最初と最後のものを除くすべてに適用されますか? – Pops
@ LordTorgamusまあ、実際にはどちらが中間であるかは関係ありません。私はすべての単語をシャッフルする必要があります。 –
ミドルネームが存在していなければ、あなたがやろうとしていることを本当に誤解していない限り、それは確かに重要です。 – Pops