挑戦はあなたの名前が一貫してフォーマットされていることを確認作っている:0のTeradata SQL
でこれを行う方法上の任意のヒントは、私は非常に悪い方法ではあるが、問題を解決したと考えています。 (Last_Name, Given_Name Middle_Initial
)そうであれば、再帰SQLでこれを解決できるかもしれません。次のSQLはGiven_Name Last_Name
をとり、Last_Name
を返します。あなたはあなたの特定の仕事を達成するためにそれを微調整することができるかもしれません。 (私はホワイトスペース文字の2(または第3)の発生を見つけようとして貼り付けたので、私のサンプルデータが一貫してフォーマットされていませんでした。)
WITH RECURSIVE cte (FullName, DelimPosition, RecursionLevel, Element, Remainder) AS
(
SELECT FullName
, 0 AS DelimPosition_
, 0
, CAST('' AS VARCHAR(128))
, FullName
FROM MyDatabase.Persons
UNION ALL
SELECT FullName
, CASE WHEN POSITION(' ' IN Remainder) > 0
THEN POSITION(' ' IN Remainder)
ELSE CHARACTER_LENGTH(Remainder)
END DelimPosition_
, RecursionLevel + 1
, SUBSTRING(Remainder FROM 0 FOR DelimPosition_ + 1)
, SUBSTRING(Remainder FROM DelimPosition_ + 1)
FROM cte
WHERE DelimPosition_ > 1
AND RecursionLevel < 3 -- Set max depth
)
SELECT FullName
, CASE WHEN POSITION('&' IN Element) = 0
THEN Element
ELSE NULL
END AS LastName
FROM cte c
WHERE RecursionLevel > 2
ORDER BY FullName;
別のオプションは、右端のn個を返すUDFを実装するだろう文字列の文字。 (例:RIGHT(FullName, n)
)
フォーマットが一貫していない場合は、それ以外の優雅なオプションを検討する必要があります。
これが役に立ちます。