国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

表值函數與JS中split()的聯系

2024-07-21 02:46:49
字體:
來源:轉載
供稿:網友
表值函數與JS中split()的聯系

在公司用云平臺做開發就是麻煩 ,做了很多功能或者有些收獲,都沒辦法寫博客,結果回家了自己要把大腦里面記住的寫出來。

split()這個函數我們并不陌生,但是當前臺有許多字段然后隨意勾選后的這些參數傳遞到后臺做處理的時候卻麻煩了,我們這個時候需要把這些當字符串傳遞到存儲過程,在存儲過程里面將這些字符串分割成一個個單獨的個體,我這里不說數組,是因為存儲過程沒有數組這一說。

這時候我們就會想到表值函數。表值函數返回的是一個Table類型的表。說到這里我想很多人都想到了,這不就是一個數組形式么?一個表就是一個數組,每一行就是一個數組中的值,但是里面的值怎么遍歷或者取出來呢?我想我們可以用游標的形式去遍歷出來

之前我做過一個gompertz的算法模型,將VBA寫的算法,全部用存儲過程寫出來,里面涉及到很多的一位數組,二維數組。我就是用一個個虛擬表寫的。

現在我們言歸正傳!

這里我們先不管內聯表值函數還是多語句表值函數。

//語法結構,函數體由一條return語句組成,最后調用的時候跟查表一樣CREATE FUNCTION [ schema_name. ] function_name ( [ { @parameter_name [ AS ] [ type_schema_name. ] parameter_data_type     [ = default ] }     [ ,...n ]  ])RETURNS TABLE    [ WITH <function_option> [ ,...n ] ]    [ AS ]    RETURN [ ( ] select_stmt [ ) ][ ; ]

這樣比較抽象,現在來個具體的使用的函數。

CREATE FUNCTION Split(@Text NVARCHAR(4000),@Sign NVARCHAR(4000))  RETURNS  @tempTable TABLE(id INT IDENTITY(1,1) PRIMARY KEY,[VALUE] NVARCHAR(4000))  AS  BEGIN      DECLARE @StartIndex INT                --開始查找的位置      DECLARE @FindIndex  INT                --找到的位置      DECLARE @Content    VARCHAR(4000)      --找到的值      SET @StartIndex = 1                       SET @FindIndex=0            --開始循環查找字符串逗號      WHILE(@StartIndex <= LEN(@Text))      BEGIN          SELECT @FindIndex = CHARINDEX(@Sign,@Text,@StartIndex)          IF(@FindIndex =0 OR @FindIndex IS NULL)          BEGIN          --如果沒有找到者表示找完了              SET @FindIndex = LEN(@Text)+1          END           SET @Content = LTRIM(RTRIM(SUBSTRING(@Text,@StartIndex,@FindIndex-@StartIndex)))          --初始化下次查找的位置          SET @StartIndex = @FindIndex+1          --把找的的值插入到要返回的Table類型中          INSERT INTO @tempTable ([VALUE]) VALUES (@Content)       END      RETURN  END  -------------------------------------------------------------------SELECT * FROM dbo.Split('a,b,c,d,e,f,g',',')  

這里面涉及到了5個函數。

第一個:LEN() 這個沒得說的,就是類似JS中的length

第二個:LTRIM() 這個從字符串左側刪除空格或其他預定義字符

第三個:RTRIM()字符串的末端開始刪除空白字符或其他預定義字符

第四個: CHARINDEX(expression1 , expression2 , [ start_location ]) 返回值是 int 這個函數有點意思了,也很重要。

  • 第一個參數是要找的字符串 ;
  • 第二個參數是在哪里查找這個字符串 ;
  • 第三個參數是開始查找的位置 ;

這個函數類似于C#中的StartWith(),IndexWith()等函數。

  例子:CustomName包含客戶的First Name和Last Name,它們之間被一個空格隔開。我們用CHARINDX函數確定兩個名字中間空格的位置。通過這個方法,我們可以分析ContactName列的空格位置,這樣可以只顯示這個列的last name部分。

第五個:SUBSTRING(str, pos, len) 這個函數類似JS中的substring()是用來抓出一個欄位資料中的其中一部分/截取字符串的一個方法 。

  • 第一個參數是要截取的字符串 ;
  • 第二個參數是開始的位置;
  • 第三個參數是截取的長度

  例子:SELECT SUBSTR (Store_Name, 2, 4)FROM GeographyWHERE Store_Name = 'San Diego';


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 曲松县| 孟村| 常熟市| 南川市| 咸宁市| 华安县| 光泽县| 库伦旗| 伊宁市| 赤壁市| 上林县| 金秀| 咸宁市| 马山县| 靖西县| 东城区| 左权县| 黄大仙区| 泰州市| 株洲市| 诏安县| 汾西县| 芒康县| 东平县| 太仓市| 扎囊县| 喀喇沁旗| 思茅市| 柏乡县| 新乡县| 沙坪坝区| 喀什市| 鞍山市| 汨罗市| 安义县| 当涂县| 万年县| 康平县| 津市市| 成都市| 广南县|