我對 SQL 環境真的很陌生。我現在面臨一個我無法解決的問題。
我有一個欄位電子郵件,其中的電子郵件地址格式如下:[email protected]
我現在需要一個將電子郵件拆分為名字、姓氏的選擇,就像這樣。
marc.mueller@blablabla.com
到
Firstname Lastname
marc mueller
我能夠過濾掉名字,但姓氏不起作用。
select email,
LEFT(email,CHARINDEX('.', email)-1) AS [New Firstname]
from data
有人可以指出我正確的方向嗎?許多問候
uj5u.com熱心網友回復:
也許您可以根據“。”的索引嘗試子字串功能。和 ”@”
SELECT
SUBSTRING(email,0,charindex('.',email)) as firstname,
SUBSTRING(email,charindex('.',email) 1,charindex('@',email)-charindex('.',email)-1) as lastname FROM data
首先,我們根據“。”拆分電子郵件地址。字符,我們得到了名字。其次,我們從第一個“.”開始拆分電子郵件地址。字符到“@”字符。
記住子字串語法;SUBSTRING(字串,開始,長度)
所以要找到姓氏子字串的長度,我們應該從“。”中減去“@”的索引。
uj5u.com熱心網友回復:
假設我們總是有一個單獨的.名字和姓氏,并且不會出現在值中的其他任何地方,并且也只有一個單獨的@名字和域:
select left(left(email, CHARINDEX('@', email) - 1), CHARINDEX('.', email) - 1) first_name
, right(left(email, CHARINDEX('@', email) - 1), len(left(email, CHARINDEX('@', email) - 1)) - CHARINDEX('.', email)) last_name
from tbl
編輯:
這是處理.名稱中缺失的 case 陳述句:
select left(left(email, CHARINDEX('@', email) - 1), CHARINDEX('.', email) - 1) first_name
, case when email like '%.%@%' then right(left(email, CHARINDEX('@', email) - 1), len(left(email, CHARINDEX('@', email) - 1)) - CHARINDEX('.', email)) else left(left(email, CHARINDEX('@', email) - 1), CHARINDEX('.', email) - 1) end last_name
from tbl
但是,我們無法知道它是名字還是姓氏,因此這將回傳兩列中的名稱。
uj5u.com熱心網友回復:
另一個使用 parsename 的替代方法。CTE 用于幫助“查看”邏輯流程,但它都可以轉換為更緊湊的形式。
declare @x table (email varchar(200));
insert @x (email) values ('[email protected]'), ('[email protected]')
;
with cte_replace as (select replace(email, '@', '.') as p1
from @x
),
cte_split as (select parsename(p1, 4) as p2, parsename(p1, 3) as p3
from cte_replace
)
select * from cte_split;
請注意邏輯如何處理沒有句點的名稱來分隔第一/最后部分。REPLACE 用法的替代方法是簡單地截斷 @ 符號。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/422542.html
標籤:
