自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

自己動手豐衣足食,DIY SQL字符串分解函數(shù)Split

數(shù)據(jù)庫
C#中和JavaScript中都有相應(yīng)的分離字符串的Split函數(shù),就想當(dāng)然的以為SQL中也會有類似的函數(shù),結(jié)果查了半天的MSSQL幫助文檔,也沒找到。沒辦法,只好自己寫了

前段時間,在做一個可以批量審核或刪除數(shù)據(jù)的功能時,遇到這么個問題:

因為審核或刪除操作是在存儲過程進(jìn)行的,所以,就打算將選中的數(shù)據(jù)的主鍵拼成字符串,傳到存儲過程進(jìn)行分離,再繼續(xù)處理。

C#中和JavaScript中都有相應(yīng)的分離字符串的Split函數(shù),就想當(dāng)然的以為SQL中也會有類似的函數(shù),結(jié)果查了半天的MSSQL幫助文檔,也沒找到。沒辦法,只好自己寫了,在網(wǎng)上搜了下相關(guān)的,看了一兩篇關(guān)于SQL分離字符串的自定義函數(shù)的文章,結(jié)果,有點失望,可能是自己水平差,或者是因為人家的代碼沒寫注釋吧,總之就是看著挺吃力的,還沒看完就決定自己寫了。。。

思路很簡單:在需要分解的字符串中,如果存在指定的分隔符,則將***個分隔符前面的字符串取出,存入表內(nèi),然后在需要分解的字符串中將已取出的字符串及***個分隔符刪除,然后繼續(xù)下一次分解(如果還存在指定的分隔符,就分解)

以下是SQL:

  1. -- ============================================= 
  2.  -- Author:        Henson 
  3.  -- Create date:   2011-04-20 
  4.  -- Description:   字符串分離函數(shù) 
  5.  -- ============================================= 
  6.  ALTER FUNCTION [dbo].[Split]  
  7.  ( 
  8.      @strText varchar(3000),--待分離的原字符串 
  9.      @strSplit varchar(100)--分隔符 
  10.  ) 
  11.  RETURNS @temp Table 
  12.  ( 
  13.      ID int IDENTITY PRIMARY KEY
  14.      SingleVal varchar(1000) 
  15.  ) 
  16.  AS 
  17.  BEGIN 
  18.      Declare @intLen int --用來存儲待分離原字符串長度 
  19.      Declare @intSplitLen int --分隔符長度 
  20.      Declare @intIndex int --用來存儲分離字符串在原字符串的位置 
  21.      Declare @strVal varchar(1000)--用來存儲分離出來后的字符串 
  22.      --獲取原字符串的長度 
  23.      Set @intLen = LEN(RTRIM(LTRIM(@strText))) 
  24.      Set @intSplitLen = LEN(RTRIM(LTRIM(@strSplit))) 
  25.      --原字符串不為空,才繼續(xù)分離 
  26.      If(@intLen > 0) 
  27.      Begin 
  28.          --循環(huán)原字符串,直至原字符串被分離完畢 
  29.          While CHARINDEX(@strSplit,@strText)>0 
  30.          Begin 
  31.              --獲取分離字符串在原字符串的位置 
  32.              Set @intIndex = CHARINDEX(@strSplit,@strText) 
  33.              --獲取分離出的字符串,并插入表中 
  34.              Set @strVal = RTRIM(LTRIM(LEFT(@strText,@intIndex-1))) 
  35.              if(LEN(@strVal)>0) 
  36.              Begin 
  37.                  Insert Into @temp (SingleVal) values(@strVal) 
  38.              End 
  39.              --分離后,將分離出的字符串(包括分隔符)從原字符串中刪除 
  40.              Set @strText = Substring(@strText,@intIndex+@intSplitLen,@intLen-@intIndex) 
  41.              --重新設(shè)置原字符串的長度 
  42.              Set @intLen = LEN(@strText) 
  43.          End 
  44.          --如果分離后的原字符串依然不為空,則也應(yīng)該插入表中 
  45.          if(LEN(RTRIM(LTRIM(@strText)))>0) 
  46.          Begin 
  47.              Insert Into @temp (SingleVal) values(@strText) 
  48.          End 
  49.      End 
  50.      return 
  51.  END 

(分隔符允許是多位的)

按一般的習(xí)慣來說,在組織多個字符串時,一般都是這種寫法:strKeys += strSingleKey + ",";

所以可能最終該字符串可能會以逗號結(jié)尾,如果組織完成后,將結(jié)尾的逗號去掉了,那就不會以逗號結(jié)尾,所以,在循環(huán)分解完成后,如果剩下的原字符串中(去除左右空格后),如果還有內(nèi)容 ,則也應(yīng)該存入表中?! ?/p>

可能我這種寫法不是***的,也可能會有問題,如確實有需要改進(jìn)的,還請指出,不勝感激?。?!

原文鏈接:http://www.cnblogs.com/uphenson/archive/2011/07/18/2109452.html

【編輯推薦】

  1. SQL Server如何動態(tài)生成分區(qū)腳本
  2. 手把手教你建立SQL數(shù)據(jù)庫的表分區(qū)
  3. 說說抽象SQL(參數(shù)化)的查詢
  4. 淺述遠(yuǎn)程Service Broker的實現(xiàn)
責(zé)任編輯:艾婧 來源: 博客園
相關(guān)推薦

2022-08-29 14:22:03

bpmn.jsVue流程

2010-11-08 17:07:41

SQL Server字

2010-09-09 11:48:00

SQL函數(shù)字符串

2010-09-06 17:30:46

SQL函數(shù)

2025-03-03 10:51:29

SQL數(shù)據(jù)庫MySQL

2010-09-13 14:55:09

sql server字

2021-03-14 15:07:55

SQLServer數(shù)據(jù)庫字符串

2014-01-02 16:14:10

PostgreSQL字符串

2011-07-12 13:01:33

2020-09-29 12:13:46

SQL引擎底層

2009-11-27 09:05:50

PHP函數(shù)split(

2010-09-06 17:26:54

SQL函數(shù)

2010-10-09 11:54:46

MySQL字符串

2010-10-21 15:26:35

SQL Server字

2010-04-09 18:15:47

Oracle 字符串

2009-11-24 09:55:44

PHP字符串函數(shù)

2010-06-28 15:18:51

SQL Server

2010-06-13 15:08:05

Linux 查看網(wǎng)絡(luò)流

2010-06-04 14:24:12

Linux 查看網(wǎng)絡(luò)流

2010-11-26 10:14:40

MySQL repla
點贊
收藏

51CTO技術(shù)棧公眾號