2017-12-19 3 views
0

私は文字列[email protected]を持っています。文字列を3列に解析したいと思います。フィールドにSQLを解析する文字列

  • カラム1 - FIRSTNAME
  • カラム2 - LASTNAME
  • カラム3 - domain.com

ノー成功しRTRIMSUBSTRREGEXP_SUBSTRを使用して、いくつかのバリエーションを試みました。どんな援助も役に立つでしょう。

Parsename、CHARINDEX、右を使用して
+5

どのデータベースエンジンを使用していますか?質問を編集し、データベースタグを追加してください。 –

+0

t-sqlのparsenameを使用する – maSTAShuFu

+1

はその一例のようなすべてのデータですか?アンダースコアなし、複数のイニシャルなし、全く考慮すべき事項はありません。各ベンダーの文字列機能が異なるため、どのデータベースに問い合わせるまで、答えを得ることはまずありません。 –

答えて

0

と(Parsename機能のために)MSSQL 2012+を交換し

declare @myemail varchar(50) = '[email protected]' 

select parsename(replace(@myemail,right(@myemail,charindex('@',reverse(@myemail))),''),2) [firstname], 
     parsename(replace(@myemail,right(@myemail,charindex('@',reverse(@myemail))),''),1) [Lastname], 
     right(@myemail,charindex('@',reverse(@myemail))) [Domain] 
0

あなたが使用しているデータベースを指定していないので、私はこの質問にお答えしますSQL Server:

SELECT SUBSTRING(q.email, 1, CHARINDEX('.', q.email) - 1) AS firstname, 
     SUBSTRING(q.email, CHARINDEX('.', q.email) + 1, CHARINDEX('@', q.email) - CHARINDEX('.', q.email) - 1) AS lastname, 
     SUBSTRING(q.email, CHARINDEX('@', q.email) + 1, LEN(q.email)) AS domain 
FROM (SELECT '[email protected]' AS email) q 

ここにはfiddleがあります。私はデモのためだけにテーブルをハードコードしましたが、もちろん自分のテーブルから選択します。このクエリは、すべてのデータが同じパターンに従っていると仮定します。

そして、あなたはLEFTRIGHTを使用することを好む場合:

SELECT LEFT(q.email, CHARINDEX('.', q.email) - 1) AS firstname, 
     SUBSTRING(q.email, CHARINDEX('.', q.email) + 1, CHARINDEX('@', q.email) - CHARINDEX('.', q.email) - 1) AS lastname, 
     RIGHT(q.email, LEN(q.email) - CHARINDEX('@', q.email)) AS domain 
FROM (SELECT '[email protected]' AS email) q 

ここfiddleです。

+0

優秀!それがトリックでした。返事をいただいた皆様に感謝します。 – TFeole

0

これを行うにはいくつかの方法があります。他の人々が言及したように、それはあなたが取り組んでいるデータベースにも依存します。

ここには、SUBSTR、INSTR、REVERSE、LENGTHの各機能を組み合わせたOracleバージョンがあります。

SELECT '[email protected]' "FULL NAME" , 
SUBSTR('[email protected]', 0, (INSTR('[email protected]', '.')-1)) "FIRST NAME ", 
SUBSTR('[email protected]' , (INSTR('[email protected]' , '.')+1), LENGTH(SUBSTR('[email protected]', (INSTR('[email protected]', '.')+1))) - INSTR(REVERSE('[email protected]'), '@')) as "LAST NAME", 
SUBSTR('[email protected]' , (INSTR('[email protected]', '@')+1)) "DOMAIN NAME" 
FROM DUAL 

+0

投稿されたすべての回答に感謝します。とても有難い.. – TFeole