47

FirstName と LastName を一緒に持つ列があります。FirstName と LastName を分けるレポートを書いています。T-SQL で FirstName と LastName を分離するにはどうすればよいですか?

4

12 に答える 12

57

FirstNameが最初のスペースまでのすべての文字であると仮定します。

SELECT
  SUBSTRING(username, 1, CHARINDEX(' ', username) - 1) AS FirstName,
  SUBSTRING(username, CHARINDEX(' ', username) + 1, LEN(username)) AS LastName
FROM
  whereever
于 2012-06-06T20:15:36.103 に答える
23

私が見つけることができる最も簡単な方法は次のとおりです。

SELECT 
  SUBSTRING(FullName, 1, CHARINDEX(' ', FullName) - 1) AS FirstName,
  REVERSE(SUBSTRING(REVERSE(FullName), 1, CHARINDEX(' ', REVERSE(FullName)) - 1)) AS LastName
FROM
  [PERSON_TABLE]
于 2013-03-07T11:22:30.633 に答える
16

これはうまくいくはずです:

Select  
    LTRIM(RTRIM(SUBSTRING(FullName, 0, CHARINDEX(' ', FullName)))) As FirstName
,   LTRIM(RTRIM(SUBSTRING(FullName, CHARINDEX(' ', FullName)+1, 8000)))As LastName
FROM TABLE

編集:不必要な計算を避けるために、アーロンとジョニーのヒントを8000の固定長で採用しました。

于 2012-06-06T20:14:03.650 に答える
10
validate last name is blank

SELECT  
person.fullName,
(CASE WHEN 0 = CHARINDEX(' ', person.fullName) 
    then  person.fullName 
    ELSE SUBSTRING(person.fullName, 1, CHARINDEX(' ', person.fullName)) end) as first_name,  
(CASE WHEN 0 = CHARINDEX(' ', person.fullName) 
    THEN ''  
    ELSE SUBSTRING(person.fullName,CHARINDEX(' ', person.fullName), LEN(person.fullName) )end) last_name

FROM person
于 2012-08-24T22:47:37.963 に答える
7

姓と名がスペースで区切られている場合、これを行うことができます。

SELECT SUBSTRING(FirstAndSurnameCol, 0, CHARINDEX(' ', FirstAndSurnameCol)) Firstname,
SUBSTRING(FirstAndSurnameCol, CHARINDEX(' ', FirstAndSurnameCol)+1, LEN(FirstAndSurnameCol)) Surname FROM ...
于 2012-06-06T20:13:37.723 に答える
6

これにより、「Firstname Z. Lastname」や「First Z Last」などの名前が処理されます

SELECT
CASE 
    WHEN CHARINDEX(' ',name) = 0 THEN name
    WHEN CHARINDEX(' ',name) = PATINDEX('% _[., ]%',name) THEN RTRIM(SUBSTRING(name, 1, CHARINDEX(' ',name) + 2)) 
    ELSE SUBSTRING(name,1, CHARINDEX(' ',name))
END [firstname]
,CASE 
    WHEN CHARINDEX(' ',name) = 0 THEN ''
    WHEN CHARINDEX(' ',name) = PATINDEX('% _[., ]%',name) THEN LTRIM(SUBSTRING(name, CHARINDEX(' ',name) + 3,1000)) 
    ELSE SUBSTRING(name,CHARINDEX(' ',name)+1,1000)
END [lastname]
FROM [myTable]
于 2012-11-22T19:15:50.757 に答える
6

以下のクエリは、FirstName しかない場合でも、FullName から FirstName と LastName を分割するのに役立つと思います。例: ' Philip John ' は、 PhilipJohnに分割できます。ただし、 Philipしかいない場合は、 Space の charIndex が 0 であるため、 '' のみが返されます。

以下のものを試してください。

declare @FullName varchar(100)='Philp John'

Select  
    LTRIM(RTRIM(SUBSTRING(@FullName, 0, CHARINDEX(' ', @FullName+' ')))) As FirstName
,   LTRIM(RTRIM(SUBSTRING(@FullName, CHARINDEX(' ', @FullName+' ')+1, 8000)))As LastName

これがあなたを助けることを願っています。:)

于 2016-01-14T14:37:04.773 に答える
3

フルネームにスペースが含まれていない場合、問題が発生する可能性があります。スペースがなく、FirstName が空の文字列になる場合、FullName の全体が Surname になると仮定すると、次のように使用できます。

SELECT
  RTRIM(LEFT(FullName, CHARINDEX(' ', FullName))) AS FirstName,
  SUBSTRING(FullName, CHARINDEX(' ', FullName) + 1, 8000) AS LastName
FROM
  MyNameTable;
于 2014-11-14T10:23:31.983 に答える