文字列の最初の名前を独自の値として解析または分割する関数を作成するためのヘルプを使用できます。私はこれを行うコードを持っていますが、これを関数に変換するスキルはありません。ここで私はそれがテストされていているコードで、自分自身で正常に動作します:誰もが、私はそれを大幅にいただければ幸いです機能にこれを変換するのに役立つ可能性が文字列の姓名を解析/分割するT-SQL関数
SELECT
CASE WHEN 0 = CHARINDEX(' ',StageThree.REST_OF_NAME)
THEN StageThree.REST_OF_NAME --No space? return the whole thing
ELSE SUBSTRING(StageThree.REST_OF_NAME, 1, CHARINDEX(' ',StageThree.REST_OF_NAME)-1)
END AS FirstName
FROM
(SELECT
--if the first three characters are in this list,
--then pull it as a "StageThree". otherwise return NULL for StageThree.
CASE WHEN SUBSTRING(StageTwo.FullName,1,3) IN ('MR ','MS ','DR ','MRS')
THEN LTRIM(RTRIM(SUBSTRING(StageTwo.FullName,1,3)))
ELSE NULL
END AS Title
--if you change the list, don't forget to change it here, too.
--so much for the DRY prinicple...
,CASE WHEN SUBSTRING(StageTwo.FullName,1,3) IN ('MR ','MS ','DR ','MRS')
THEN LTRIM(RTRIM(SUBSTRING(StageTwo.FullName,4,LEN(StageTwo.FullName))))
ELSE LTRIM(RTRIM(StageTwo.FullName))
END AS REST_OF_NAME
,StageTwo.OriginalName
FROM
(SELECT
--trim leading & trailing spaces before trying to process
--disallow extra spaces *within* the name
REPLACE(REPLACE(REPLACE(REPLACE(LTRIM(RTRIM(Contact)),' ',' '),' ',' '),',',' '),'.',' ') AS FullName
,Contact AS OriginalName
FROM
My.dbo.database
) StageTwo
) StageThree
場合。もし私がこれに助けを得ることができれば、(関数として)最後の名前を得るためのコードも投稿します。
このコードは正しいと思われますが、私のクエリでは起動できません。
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[FirstName](@input VARCHAR(100)) --how ever many you need
RETURNS @returnTable table(FirstName varchar(100))
AS
BEGIN
INSERT INTO @returnTable (FirstName)
SELECT
CASE WHEN 0 = CHARINDEX(' ',StageThree.REST_OF_NAME)
THEN StageThree.REST_OF_NAME --No space? return the whole thing
ELSE SUBSTRING(StageThree.REST_OF_NAME, 1, CHARINDEX(' ',StageThree.REST_OF_NAME)-1)
END AS FirstName
FROM
(SELECT
--if the first three characters are in this list,
--then pull it as a "StageThree". otherwise return NULL for StageThree.
CASE WHEN SUBSTRING(StageTwo.FullName,1,3) IN ('MR ','MS ','DR ','MRS')
THEN LTRIM(RTRIM(SUBSTRING(StageTwo.FullName,1,3)))
ELSE NULL
END AS Title
--if you change the list, don't forget to change it here, too.
--so much for the DRY prinicple...
,CASE WHEN SUBSTRING(StageTwo.FullName,1,3) IN ('MR ','MS ','DR ','MRS')
THEN LTRIM(RTRIM(SUBSTRING(StageTwo.FullName,4,LEN(StageTwo.FullName))))
ELSE LTRIM(RTRIM(StageTwo.FullName))
END AS REST_OF_NAME
FROM
(SELECT
--trim leading & trailing spaces before trying to process
--disallow extra spaces *within* the name
REPLACE(REPLACE(REPLACE(REPLACE(LTRIM(RTRIM(@Input)),' ',' '),' ',' '),',',' '),'.',' ') AS FullName
) StageTwo
) StageThree
RETURN
なぜこれが関数に変換することは困難です。あなたは機能に関する文書を読んだのですか? – Hogan
Googleを使用している場合、これに関するインターウェブに関する多くのリソースがあります。 – dfundako
これを_covert_funciton_にしようとするあなたの試みを示し、あなたがどのような問題を持っているのかを示してください。 – HABO