1

あるテーブルには " John Doe <jdoe@aol.com>" があり、別のテーブルには " " がありjdoe@aol.comます。最初のフィールドの電子メール アドレスを 2 番目のフィールドと照合する UDF または別の方法はありますか?

これは本番コードではありません。アドホック分析を実行するために必要なだけです。残念なことに、DB にはフレンドリーなメール アドレスとそうでないメール アドレスの両方が保存されていません。

更新: 書式設定を修正しました。最初の書式は と である必要が<あり>ます。

4

4 に答える 4

1

最後のスペースで電子メール アドレスを分割します。これにより、電子メール アドレスが得られます。正確なコードはデータベースによって異なりますが、大まかな擬似コードは次のとおりです。

email = row.email
parts = email.split(" ")
real_email = parts[ len(parts) - 1 ]
于 2009-05-19T00:47:47.763 に答える
1

「フレンドリ」な電子メール アドレスのパターンがどの程度一貫しているかに応じて、LIKE キーワードを使用できるはずです。

SELECT
     T1.nonfriendly_email_address,
     T2.friendly_email_address
FROM
     My_Table T1
INNER JOIN My_Table T2 ON
     T2.friendly_email_address LIKE '%<' + T1.nonfriendly_email_address + '>'
于 2009-05-19T03:59:47.483 に答える
0

LOCATEメソッドを使用して結合を行うことができます...

 SELECT * FROM table1 JOIN table2 ON (LOCATE(table2.real_email, table1.friend_email) > 0) 
于 2009-05-19T01:08:26.707 に答える
0

おそらく、次の TSQL コードが役に立ちます。

DECLARE @email varchar(200)
SELECT @email = 'John Doe jdoe@aol.com'

SELECT REVERSE(SUBSTRING(REVERSE(@email), 0,CHARINDEX(' ', REVERSE(@email))))

そのステートメントは次を返します。

jdoe@aol.com

ロジックを通して話す:

  1. メール欄を反転
  2. 最初の ' ' 文字のインデックスを見つけます ... ここまでのすべてが実際のメール アドレスです
  3. (反転された) 文字列の先頭から、手順 2 で見つかったインデックスまで、列を部分文字列化します。
  4. 文字列をもう一度逆にして、正しい順序にします。

もっと洗練された方法があるかもしれませんが、それは機能するので、JOIN の片側に使用できます。電子メール アドレスにスペースを含めることはできないため、最後のスペース (または逆にすると最初のスペース) が実際の電子メール アドレスと親しみやすい電子メール アドレスの区切りになります。私が知る限り、TSQL には LastIndexOf() 関数が含まれていません。これは、二重の Reverse() 関数呼び出しを避けるのに便利でした。

于 2009-05-19T01:04:00.960 に答える