1

FullNameテーブルの列に基づいて電子メールの提案を取得するクエリを SQL Server 2008 で作成しようとしていPersonます。

例:Person名前付きの場合Rodrigo David Waltenberg、クエリは返す必要がありますrodrigo.waltenberg@company.com

しかし、フルネームを分割してすべて小文字にする方法がわかりません。フルネームにはミドルネームも含まれる場合がありますが、姓と名のみが必要です。SQLを使用してそれを行う方法を知っている人はいますか?

4

1 に答える 1

2

Google の魔法の力を活用すると、多くの場合に役立ちます

「MS SQL 小文字文字列」、1 番目のヒット:

LOWER ( character_expression )

文字列を小文字に変換します。

「MS SQL 置換文字列」、最初のヒット:

 REPLACE ( string_expression , string_pattern , string_replacement )

必要なものを、指定された文字列で指定した他の文字列に置き換えます...

したがって、2つを組み合わせて、次のようにします。

入力を小文字にし、スペースをドットに置き換えます。

 REPLACE(LOWER(Fullname), ' ','.')

これでは不十分で、最初と最後の部分だけが必要な場合は、中間部分を除外するのは簡単なことです。

ステップ 1: 「文字列内の char の MS SQL インデックス」、最初のヒット:

CHARINDEX ( expressionToFind ,expressionToSearch [ , start_location ] ) 

ステップ2:

「MS SQL 文字列の左端の文字」、最初のヒット:

LEFT ( character_expression , integer_expression )

ステップ 3:

「MS SQL 文字列の右端の文字」、最初のヒット:

RIGHT ( character_expression , integer_expression )

ステップ 4:

「MS SQL 逆文字列」、最初のヒット:

REVERSE ( string_expression )

常に true の場合、その名前には少なくとも 1 つの空白文字で区切られた少なくとも 2 つの部分があり、それらの部分をつなぎ合わせてください:

少なくとも 2 つの部分 (小文字化) で構成される入力の最初と最後の部分を取得し、それらをドットで結合します。

LOWER(
    LEFT(Fullname, CHARINDEX(' ',Fullname)-1) + 
    '.' +
    RIGHT(Fullname, CHARINDEX(' ', REVERSE(Fullname))-1)
 ) + '@whatever.com' as suggestion

また、Fullname列に先頭と末尾のスペースが含まれる可能性がある場合は、TRIMを使用してそれらを削除してください...それは面倒になります...

入力文字列の任意の量の完全なソリューション:

CASE 
 --when there are at least two spaces ( optimally 3 names, or double spaces between names)
    WHEN LEN(Fullname)-LEN(REPLACE(Fullname, ' ','')) >1 
    THEN 
        LOWER(
            LEFT(Fullname, CHARINDEX(' ',Fullname)-1) + 
            '.' +
            RIGHT(Fullname, CHARINDEX(' ', REVERSE(Fullname))-1)
         )
    ELSE
    --at most one space in name
        REPLACE(LOWER(Fullname), ' ','.')
END + '@whatever.com' as suggestion

また、質問を投稿する前に、調査を行い、何かを試すこと忘れないでください。

于 2012-11-22T19:18:00.620 に答える