SQL中的Stuff 函式

2021-04-26 06:26:39 字數 1802 閱讀 1483

sql中的stuff()函式

soloist發表日期: 2008-07-18 20:49  

複製鏈結

也許由於最近心情不好,這兩天也在工作和人較起了真,這可和咱平時與人為善,不窮追猛打的作風有出入。這不,昨天剛就乙個究竟是基本設計、詳細設計和**製造中的哪個環節出錯的問題和乙個同事爭論得口乾舌燥,今天又心情不爽地在

stuff

()函式上和另外乙個同事較起了真。不過,幸好這兩次我都沒有出錯。

不說亂七八糟的了,就對

stuff()

函式做下溫習吧,雖然自己是對的,但溫故而知新嘛。其實問題不麻煩,就是乙個要做乙個處理,把字串格式化一下。比如,資料庫表中有三個字段,要以

***x-******-******

的格式輸出,其中不滿相應位數的,在後面補空格,即把類似23,

1234

,879

這樣的三個數以如下形式輸出到報表中:

23__-1234_

_-879___

的格式輸出

,標註顏色的下劃線一種顏色代表乙個空格。爭論的焦點是能不能在資料庫(本人用的

sql server

)中進行轉換處理。同事認為不能,我認為可以。我告訴他用

stuff()

函式處理。我沒有做實驗,他做了實驗,他的結果是不行,因為會轉換出匪夷所思的結果。於是我也進行了調查。結果如下:1.對

stuff

函式功能進行分析:

stuff(expression1_str,startindex,lengthint,expression2_str)

函式共有四個引數,其功能是將

expression1_str

中自startindex

位置起刪除

lengthint

個字元,然後將

expression2

插入到expression1_str

中的startindex

位置。2

.做實驗:

我先做了如下實驗:

stuff

(space(10

),0,len

(『1234

』),『

1234

』),轉換的結果如右:

234___

___1,即如其所言轉換所得之匪夷所思之結果。思考了一會,未解。又做一實驗,如下:

stuff

(space(10

),1,len

(『1234

』),『

1234

』),此時結果如右:

1234___

___,此時得到了想要的結果。對比之下,即可知何故:一般的程式語言和

sql語言一樣,都把字串當作字元陣列處理,但乙個差別在於,大多數程式語言的陣列下標起始位為0,而

sql server中為1

,由於慣性思維,常常把一般程式語言中的

0起始位帶至

sql程式設計中。故而當第一次實驗時,從

0位開始刪除和插入,而

0位不存在,故將最末位做為

0位來處理了。而第二次從

1開始就沒有錯了。

於是,同事的問題就非常簡單的解決了:

stuff(space(4),1,len(『23』),』23』)+』-』+stuff(space(6),1,len(『1234』),』1234』)+』-』+ stuff(space(6),1,len(『879』),』879』),

轉換結果自然就為

23__-1234_

_-879___

了。

SQL 中STUFF函式用法

1 作用 刪除指定長度的字元,並在指定的起點處插入另一組字元。2 語法 stuff character expression start length character expression 3 示例 以下示例在第乙個字串 abcdef 中刪除從第 2 個位置 字元 b 開始的三個字元,然後在刪除...

SQL Server中的STUFF函式的使用

sql server中的stuff函式的使用 stuff character expression start length character expression 引數character expression 乙個字元資料表示式。character expression 可以是常量 變數,也可以...

SQL Server中的STUFF函式的使用

stuff character expression start length character expression 作用 刪除指定長度的字元,並在指定的起點處插入另一組字元。乙個字元資料表示式。character expression 可以是常量 變數,也可以是字元列或二進位制資料列。乙個整數...