Sql server中的取字串

來源:互聯網
上載者:User

 問題:假設有個表的結構是(學號,姓名,電子郵件地址)

    請統計是否有重名的學生;再統計是否有電子郵件地址有重複;最後統計下使用不同的電子郵件的伺服器各有多少個學生,比如 cbmichael@163.com  richman@163.com 在統計時都算是163.com的郵件

答: 是否有重名可以用group by 來解決,最常見的

SELECT count(sname)

FROMfrom table1

Group by sname

如果每項都是1,那麼表示沒有重複

還有一種方法,比較法

分別執行下面的語句

SELECT count(distinct sname)

from table1

SELECT count(sname)

from table1

看兩次的查詢結果是否一致,若一致表明沒有重複,反之則有重名的情況.

 

同理的, 統計是否有電子郵件地址有重複也採用上述兩種方法,只需把sanme替換為email即可.

 

接下來說最難的部分: 統計下使用不同的電子郵件的伺服器各有多少個學生

思路:首先,統計有多少個學生是很簡單的,痛點在於如何統計不同的電子郵件伺服器

如同例子裡的說明: 比如 cbmichael@163.com  richman@163.com 在統計時都算是163.com的郵件

也就是說我們真正要統計的就是@後面的部分! 這裡我先想到了在字串取部分,記得原來用excel有個MID函數可以有這樣地作用,現在換SQL,找函數。。。這裡卡了有一天的樣子。。不斷地百度。。終於找到了Substring!

先來看語句:

select substring(email,charindex('@',email)+1,100) 郵件伺服器, count(email) 使用學生數

from table1

Group by substring(email,charindex('@',email)+1,100)

分條解析。。。

Substring是取得字串的函數,基本用法是

文法
SUBSTRING( e-xpression , start , length )

參數
e-xpression
是字串、二進位字串、text、image、列或包含列的運算式。不要使用包含彙總函式的運算式。
start
是一個整數,指定子串的開始位置。
length
是一個整數,指定子串的長度(要返回的字元數或位元組數)。

所以剛開始是用subrsting(email,

 

接下來是

舉個例子:

CHARINDEX('SQL', 'Microsoft SQL Server')

 

      這個函數命令將返回在“Microsoft SQL Server”中“SQL”的起始位置,在這個例子中,CHARINDEX函數將返回“S”在“Microsoft SQL Server”中的位置11

我們這裡用

charindex('@',email),取得@在email欄位中的位置,由於是取伺服器位址,所以後面跟上+1表明是從@這個位置的向右第一個字元開始取,後面的100表示取的長度,因為各個郵件伺服器地址長度不一樣,比如163.com,hotmail,com所以取100來保險些。這樣就完成了取得不同的電子郵件伺服器的任務:)

 

另法:

select right(email,len(email)-charindex('@',email)) 郵件伺服器,count(email) 使用人數

from table1

group by right(email,len(email)-charindex('@',email))

 

這個方法好理解些,先申明這裡的right,len,charindex都是取得字串的函數

用法:right(char_expr,int_expr) 返回字串右邊int_expr個字元

這裡用right(email,len(email)-charindex('@',email)表示的意思是返回字串email裡面的len(email)-charindex('@',email)長度,len(email)-charindex('@',email)的意思是總的字元個數減去@之前(包括@)的字元個數,留下來的字元長度就是郵件伺服器地址啦:)

 

建議大家用baidu查查關於sql取字串的方法,一定會獲益匪淺的.

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.