日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

朋友們,我們在寫SQL腳本時,經常會碰到一些個看似簡單、卻無從下手的問題,這類問題說大不大、說小也不小,經常會搞的我們很頭痛。

SQL小技巧解決大問題:如何統計字符出現次數?

 

比如,如何使用SQL語句統計字符在某個字符串中出現的次數?這就是個看似簡單的問題,遍查SQL支持的字符串函數(至少在MSSQL中),并沒有發現有直接可用的函數。

其實,絕大部分情況下,只要我們學會了變通,很多讓我們苦惱的問題很容易就迎刃而解了。不信請您往下看。

不變通也能解決問題,雖然復雜,但用到的技術都是基本功

因為沒有相應的內置函數,大部分朋友首先想到的是:把整個字符串按照字符位置遍歷,一個個匹配。這種方法應該是大部分朋友們首先會想到的方法。

這個方法當然肯定可行,因為筆者以前就這樣干過。我把曾經寫過的腳本改造下貼出來,您看看多麻煩:

--定義變量
declare @pos bigint=1;
declare @len bigint;
declare @char nvarchar(1);
declare @text nvarchar(max);
declare @val varchar(max)=space(0);
declare @count bigint=0;
--初始化一些變量
set @text=N'印度囂張、越南陰險、美國霸道、中國低調、、、';
set @len=len(@text);
--統計“、”出現個數
while @pos<=@len begin --將所有的部分循環完全
 set @char=substring(@text,@pos,1)
 if @char='、' set @count+=1;
 set @pos=@pos+1 --
end
--顯示個數
print @count;

上面的代碼段,主要用來統計字符串@text中包含的“、”的個數,下圖是執行的效果:

SQL小技巧解決大問題:如何統計字符出現次數?

 

為了統計“、”的個數,需要通過while循環,將字符串中所有字符做一次遍歷,獲取每個位置字符使用的是substring函數,通過變量@pos記錄當前字符的位置,循環一次,該變量累加1表示位置后移一位。

這種方法雖然挺復雜,但所用到的都是SQL的基礎知識,當然也需要一定的SQL功底,不管您喜不喜歡,最起碼您要能看得懂這類代碼對吧。

這種方式除了麻煩,還有致命缺點,比如,有時我們需要在某條SQL腳本中、根據某個字段中含有某個字符的個數來做排序或判斷,這種方法就麻煩了,您需要寫成自定義函數調用才行。

世上本無事、庸人自擾之,我下面為您提供一種變通方式,一條腳本實現之。

變通方法需要靈活變通,需要您換換思考的方式!

SQL小技巧解決大問題:如何統計字符出現次數?

 

正向思維中,查找字符串中包含的某個字符的個數,當然是通過遍歷挨個對比。其實我們可以采用逆向思維:如果我們把要找的字符從字符串中全部干掉,那字符串減少的長度不就是包含的個數么?!

如何干掉待查找字符呢?這就要用到另一個字符串處理函數replace。腳本如下:

declare @text nvarchar(max)=N'印度囂張、越南陰險、美國霸道、中國低調、、、';
select len(@text)-len(replace(@text,'、',space(0)));

簡單吧,我們使用字符串長度減去替換成space(0)之后的長度,不正是“、”出現的次數么?

下面是運行效果:

SQL小技巧解決大問題:如何統計字符出現次數?

 

與第一種方法相比,第二種方法可謂是簡單快捷、殊途同歸。很多時候我們需要將結果嵌入在SQL中,比如在where條件中、排序時等,如果用到該個數做判斷或排序,您就只能用第二種方法、或者將第一種腳本改成自定義函數來調用了。

分享到:
標簽:SQL
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定