"Mr John Smith"というフルストリングに完全な名前を書き戻す列があります。T-SQL - データの1つの列から姓を抽出する
姓のみを抽出するにはどうすればよいですか?
私のカラム名は "Contact_Name"です。
データソースには数千の名前が含まれており、一部にはハイフンが含まれています。第1の名前と第2の名前の間には常にスペースがあります。あなたのCONTACT_NAMEはスペースを毎回含まれている場合
おかげ
"Mr John Smith"というフルストリングに完全な名前を書き戻す列があります。T-SQL - データの1つの列から姓を抽出する
姓のみを抽出するにはどうすればよいですか?
私のカラム名は "Contact_Name"です。
データソースには数千の名前が含まれており、一部にはハイフンが含まれています。第1の名前と第2の名前の間には常にスペースがあります。あなたのCONTACT_NAMEはスペースを毎回含まれている場合
おかげ
これは、すべての潜在的な姓をキャッチしませんが、あなたは、あなたの質問に求めているものを行います。
declare @Contact_Name nvarchar(100) = 'Mr John Smith';
select reverse(left(reverse(@Contact_Name)
,charindex(' ',reverse(@Contact_Name),1)-1
)
) as Surname;
戻り値:
Surname
```````
Smith
が、これはあなたの相対的な良い解決策を与える必要があります。
SELECT REVERSE('ad bbb cvb'),
CHARINDEX(' ', REVERSE('ad bbb cvb')),
LEN('ad bbbb cvb'),
SUBSTRING('ad bbb cvb',
LEN('ad bbb cvb')-CHARINDEX(' ', REVERSE('ad bbb cvb'))+2,
LEN('ad bbb cvb'))
これはテストしましたか? 'Mr John Smith'の 'Contact_Name'に 'h'を返します。 – iamdave
うわー、これらの答えの一部であります超複雑...ここに簡略化したバージョンがあります:
DECLARE @NAMES TABLE (Name VARCHAR(55));
INSERT INTO @NAMES VALUES ('Mr. John Smith');
INSERT INTO @NAMES VALUES ('Mrs. Jane Smith');
INSERT INTO @NAMES VALUES ('Mr. John Doe');
INSERT INTO @NAMES VALUES ('Mr. Englebert Humperdink');
INSERT INTO @NAMES VALUES ('Ms. Maybe Happy-NotSoMuch');
INSERT INTO @NAMES VALUES ('Mr. Lovely Taco');
SELECT RIGHT(Name,CHARINDEX(' ',REVERSE(Name)) - 1)
FROM @NAMES
;
戻り値:
Name
-----
Smith
Smith
Doe
Humperdink
Happy-NotSoMuch
Taco
拘束されていないユーザーは、個人の名前を入力することができますさまざまな方法の数は、ほぼ無制限であるように、これは、悪名高く難しい問題です。優れたソリューション:firstName、prefix、middleName、surname、title、suffixなどを別々のフィールドに分けてから、新しいスキーマへの移行中にデータをクリーンアップします。 –
チャールズと同意すると、二重括りをした、あるいは複数の姓の姓を扱う人々はどうやって対処しますか?あなたのデータ*は常に姓を持つことを100%保証できますか? – iamdave
姓は常に最後(最後のスペースの後)ですか? – vitalygolub