select left(emailaddress, len(emailaddress) - charindex('@', emailaddress))
我得到如下結果:如何從字符串[email protected]中提取字符串'foo'?
[email protected]
請更正以下select語句。我需要用電子郵件地址的語氣來做到這一點,並只提取用戶名。
select left(emailaddress, len(emailaddress) - charindex('@', emailaddress))
我得到如下結果:如何從字符串[email protected]中提取字符串'foo'?
[email protected]
請更正以下select語句。我需要用電子郵件地址的語氣來做到這一點,並只提取用戶名。
你在不經意間重新實施「右」那裏:)
試試這個:
select left(emailaddress, charindex('@', emailaddress) - 1)
它尋求@
的位置,並採取字符數最多,但不包括(這是- 1
)@
符號。
請注意不具有@
的字符串;你會得到一個空字符串。
我不知道,爲什麼-1? charindex給出了一個索引,剩下的長度據我瞭解? – StampedeXV 2009-09-17 14:20:08
Ayup。 Charindex從左開始計數,所以如果你想要字符串的左邊部分,就減去1,這樣你就不會包含搜索字符(@)本身。如果您需要字符串的* right *部分,即*搜索字符後面的*,則只需要字符串的長度。 – Martha 2009-09-17 14:21:05
例如:[email protected] charindex返回1 left([email protected],1)返回 - >我們想要的。所以我們不需要減號1. – StampedeXV 2009-09-17 14:24:20
只是一個猜測。我沒有任何訪問sql-server的權限,不熟悉它。但是......
你試過:
select left(emailaddress, charindex('@', emailaddress))
這將包括@字符,您需要減去1以獲得所有字符但不包括搜索字符 – Martha 2009-09-17 14:23:00
實際上,這取決於字符串是零索引還是單索引。如果爲零索引,charindex返回3,那麼您會得到3個左邊的字符。基於1的字符串將返回4,因此它將包含'@'。 – 2009-09-17 14:29:35
但是在TransactSQL中,charindex是基於1的!請參閱http://msdn.microsoft.com/en-us/library/ms186323.aspx – 2009-09-17 14:32:04
select left(emailaddress, charindex('@', emailaddress)-1)
如果您需要噸做到這一點(或噸,但肯定不是色調)的電子郵件地址和/或你正在做的經常,恰當的時間是數據進入表格(通過使用插入/更新觸發器)並在該點將其分成兩列。這樣,它只會在需要時發生,而不是每次在桌上進行選擇。
數據幾乎是總是讀取的次數比寫入的要多,通過在插入/更新時分割,可以最大限度地減少要完成的工作量。每行函數從不能很好地擴展,因爲表格變得更大,並且簡單連接兩列的成本要比根據字符分隔符分割它們要小得多。
其他答案已經告訴你如何做拆分。我的觀點是你在錯誤的時間做這件事。當然,如果模式更改不在問題中,請忽略此響應。但在我看來,這將是最好的選擇。
刪除了您的真實電子郵件,以防萬一,如果我錯了,隨時加回來;沒有意見分享您的電子郵件地址(如果是)垃圾郵件發送者得到:) – 2009-09-17 14:27:00