1. 程式人生 > >SQL查詢某個字串第N次出現的位置的函式(轉帖)

SQL查詢某個字串第N次出現的位置的函式(轉帖)

01.if exists(select 1 from sysobjects where name='char_index')
02. 03.drop function char_index
04. 05.
06. 07.create function char_index(@string varchar(8000),@char varchar(10),@index smallint)
08. [email protected]:待查詢字串,@index:查詢位置
10. 11.returns smallint
12. 13.as
14. 15.begin
16. 17. declare
18. 19. @i tinyint,--當前找到第@i個
20. 21. @position tinyint--所在位置
22. 23. set @
[email protected]
;
24. 25. set @i=0;
26. 27. while charindex(@char,@string,@position)>0
28. 29. begin
30. 31. set @position=charindex(@char,@string,@position)+1;
32. 33. set @[email protected]+1;
34. 35. if @[email protected]
36. 37. begin
38. 39. return @position-1;
40. 41. end
42. 43. end
44. 45. return 0;--0表示未找到
46. 47.end
48. 49.
50. 51.select dbo.char_index('sdf_dsf_dfgdg_ertr_erte','f_',2)
if exists(select 1 from sysobjects where name='char_index')drop function char_index create function char_index(@string varchar(8000),@char varchar(10),@index smallint)
[email protected]
:待查詢字串,@index:查詢位置returns smallintasbegin declare @i tinyint,--當前找到第@i個 @position tinyint--所在位置 set @[email protected]; set @i=0; while charindex(@char,@string,@position)>0 begin set @position=charindex(@char,@string,@position)+1; set @[email protected]+1; if @[email protected]
begin return @position-1; end end return 0;--0表示未找到end select dbo.char_index('sdf_dsf_dfgdg_ertr_erte','f_',2) [SQL] view plaincopyprint?01.--如何查詢某個字串第N次出現的位置,
02. 03.--比如:字串"sdf_dsf_dfgdg_ertr_erte",要查詢"f_"第二次出現的位置
04. 05.if object_id('f_findstr') is not null
06. 07.drop function f_findstr
08. 09.go
10. 11.create function f_findstr(@s varchar(8000),@find varchar(10),@index int)
12. 13.returns int
14. 15.as
16. 17.begin
18. 19.declare @startindex int
20. 21.set @startindex=0
22. 23.while @index>0
24. 25.begin
26. 27.if charindex(@find,@s,@startindex)>0
28. 29.set @startindex=charindex(@find,@s,@startindex+1)
30. 31.set @[email protected]
32. 33.end
34. 35.return @startindex
36. 37.end
38. 39.go
40. 41.select dbo.f_findstr('sdf_dsf_dfgdg_ertr_erte','f_',2)
--如何查詢某個字串第N次出現的位置,--比如:字串"sdf_dsf_dfgdg_ertr_erte",要查詢"f_"第二次出現的位置if object_id('f_findstr') is not nulldrop function f_findstrgocreate function f_findstr(@s varchar(8000),@find varchar(10),@index int)returns intasbegindeclare @startindex intset @startindex=0while @index>0beginif charindex(@find,@s,@startindex)>0set @startindex=charindex(@find,@s,@startindex+1)set @[email protected] @startindexendgoselect dbo.f_findstr('sdf_dsf_dfgdg_ertr_erte','f_',2) [SQL] view plaincopyprint?01.use test
02. 03.go
04. 05.if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[F_Str]') and xtype in (N'FN', N'IF', N'TF'))
06. 07.drop function [dbo].[F_Str]
08. 09.GO
10. 11.
12. 13.CREATE FUNCTION dbo.F_Str(
14. [email protected] varchar(8000),
16. [email protected] int,
18. [email protected] varchar(10)
20. 21.)RETURNS int
22. 23.AS
24. 25.BEGIN
26. 27. IF @s IS NULL RETURN(NULL)
28. 29. DECLARE @splitlen int,@i int
30. 31. SELECT @splitlen=LEN(@split+'a')-2,@i=0
32. 33. WHILE @pos>1 AND CHARINDEX(@split,@[email protected])>0
34. 35. SELECT @[email protected],@[email protected]+CHARINDEX(@split,@[email protected])[email protected],
36. 37. @s=STUFF(@s,1,CHARINDEX(@split,@[email protected])[email protected],'')
38. 39. RETURN(@i+CHARINDEX(@split,@[email protected]))
40. 41.END
42. 43.GO
44. 45.declare @s nvarchar(100)
46. 47.select @s='sdf_dsf_dfgdg_ertr_erte'
48. 49.select dbo.F_Str(@s,2,'f_')
50. 51.
52. 53.
54. 55.-----------
56. 57.7
58. 59.
60. 61.(1 行受影響) use testgoif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[F_Str]') and xtype in (N'FN', N'IF', N'TF'))drop function [dbo].[F_Str]GOCREATE FUNCTION dbo.F_Str(@s varchar(8000), @pos int, @split varchar(10) )RETURNS intASBEGIN IF @s IS NULL RETURN(NULL) DECLARE @splitlen int,@i int SELECT @splitlen=LEN(@split+'a')-2,@i=0 WHILE @pos>1 AND CHARINDEX(@split,@[email protected])>0 SELECT @[email protected],@[email protected]+CHARINDEX(@split,@[email protected])[email protected], @s=STUFF(@s,1,CHARINDEX(@split,@[email protected])[email protected],'') RETURN(@i+CHARINDEX(@split,@[email protected]))ENDGOdeclare @s nvarchar(100)select @s='sdf_dsf_dfgdg_ertr_erte'select dbo.F_Str(@s,2,'f_')-----------7(1 行受影響)方法4[SQL] view plaincopyprint?01.if exists(select 1 from sysobjects where name='char_index')
02. 03.drop function char_index
04. 05.go
06. 07.create function char_index(@string varchar(8000),@char varchar(10),@index smallint)
08. [email protected]:待查詢字串,@index:查詢位置
10. 11.returns smallint
12. 13.as
14. 15.begin
16. 17. declare
18. 19. @i int,--當前找到第@i個
20. 21. @position int--所在位置
22. 23. set @position=1;
24. 25. set @i=0;
26. 27. while charindex(@char,@string,@position)>0
28. 29. begin
30. 31. set @position=charindex(@char,@string,@position)+1;
32. 33. set @[email protected]+1;
34. 35. if @[email protected]
36. 37. begin
38. 39. return @position-1;
40. 41. end
42. 43. end
44. 45. return 0;--0表示未找到
46. 47.end
48. 49.go

相關推薦

SQL查詢某個字串N出現位置函式()

01.if exists(select 1 from sysobjects where name='char_index') 02. 03.drop function char_index 04. 05. 06. 07.create function char_index(@string varchar(8

sqlserver 查詢某個字元在字串N出現位置

select dbo.fn_find('A',@str,1) as one, dbo.fn_find('A',@str,2) as two, dbo.fn_find('A',@str,3) as three, dbo.fn_find('A',@str,4) as four

用原生JS實現查詢n出現的子字串

用到的函式為indexOf; 先來簡要介紹一下indexOf;,語法 stringObject.indexOf(searchvalue,fromindex) 主要可分為以下兩點理解 是一個字串物件的方法 有兩個引數 searchvalue為必

java獲取字串N出現特定字元的位置

/** * 讀取字串第i次出現特定符號的位置 * @param string * @param i * @return */ public static int getCharacterPosition(String string ,int i,Str

android 擷取兩個特殊字元之間的資料,獲取某特殊字元n出現位置

String result4 = str.substring(str.length()-1,str.length()); Log.e("=====result4", result4);//獲取到“1” //獲取字元"|"第一次出現的位置,第二次出現的位置,第三次出現的位置;(傳參為,字串資料,和次數) pub

java獲取N字串出現位置,StringUtils詳解(判空,去空,比較,查詢

用一個工具類commons-lang3.jar 如果找不到的同學的,可以匯入maven <dependency> <groupId>org.apache.commons</groupId> <ar

查詢字串最後一出現位置

以下例項中我們通過字串函式 strOrig.lastIndexOf(Stringname) 來查詢子字串 Stringname 在 strOrig 出現的位置: 例項程式碼如下: Search

python 總結下 字元在字串n的所在位置

def findSubStr(substr, str, i): count = 0 while i > 0: #迴圈來查詢 index = str.find(substr) if in

java獲取某個子字串在整個字串N出現時的下標索引

//子字串modelStr在字串str中第count次出現時的下標 private int getFromIndex(String str, String modelStr, Integer count) { //對子字串進行匹配 Matcher slas

n考試

center family 3.0 代碼 fine last 數據 can color 題目: 1.堆方塊 【題目描述】 給定N個方塊,排成一行,將它們編號1到N。 再給出P個操作: M i j表示將i所在的那一堆移到j所在那一堆的頂上。 C i表示一個詢問,詢問i下面有

數據庫小組N小組會議

代碼 方便 let 數據傳輸 apt 的人 傳輸數據 servlet容器 用戶 時間:5.30晚,9:30 ~ 11:30 主題:討論android app與服務器之間數據同步的技術選型與實現 與會人:陳兆庭,黃誌鵬,吳雪晴 討論內容: 大體分析 關於數據同步,整體上有兩

n搭建 SSM 框架

什麼說第 N 次搭建SSM框架呢? 剛學習java的時候,搭建 SSM 框架想做一個個人專案之類的,後來沒搭起來,也就拖延了,進入公司之後,接觸的第一個專案就是SSM的,模仿了一下,也能搭個簡簡單單的,雖然也碰了很多壁,可是還是沒做筆記(現在挺絕望的),這事也就放一邊了! 現在閒下來想弄一個簡單的SSM

ORACLE——在所有表、欄位中查詢某個字串並輸出表名和欄位名

什麼都不想說,直接上乾貨 declare v_Sql varchar2(2000); v_count number; begin for xx in (select t.OWNER, t.TABLE_NAME, t.COLUMN_NAME from

java基礎練習01--查詢Fibonacci數列n個數

package cn.drc.fibonacci; /** * Fibonacci數列是這樣的一個數列: * 1 1 2 3 5 8 13 21 ... * 求出這個數列第 n 個數是多少 * @author drc * */ public class FibonacciDemo {

ACMNO.14一球從M米高度自由下落,每次落地後返回原高度的一半,再落下。 它在N落地時反彈多高?共經過多少米? 保留兩位小數 輸入 M N 輸出 它在N落地時反彈多高?共經過多少米

題目描述 一球從M米高度自由下落,每次落地後返回原高度的一半,再落下。 它在第N次落地時反彈多高?共經過多少米? 保留兩位小數 輸入 M N 輸出 它在第N次落地時反彈多高?共經過多少米? 保留兩位小數,空格隔開,放在一行 樣例輸入 1000 5

leetcode_459. Repeated Substring Pattern 重複子串模式,判斷某個字串能否由某個字串重複若干組成

題目: Given a non-empty string check if it can be constructed by taking a substring of it and appending multiple copies of the substring

sql查詢某個資料庫裡所有表名及表資訊

sql server 數表: select count(1) from sysobjects where xtype=’U’ 數檢視: select count(1) from sysobject

Hibernate SQL查詢時有重名欄位出現的問題

Hibernate 執行資料庫操作語句時會自動為欄位取別名。 問題: SELECT a.name,ec.name resourcesName FROM eam_alert a,eam_resource ec WHERE a.resource_id=ec.id 使用jdbc

Linux n驅動入門(一) ---- helloWorld

Linux驅動 helloWorld 根據下面的helloWorld.c驅動來了解總結核心中的printk,__init,__exit helloWorld.c #include <linux/init.h> #include

找出二叉查詢樹中n大的值

問題: 給一個二叉查詢樹(BST),找出第 k 大的值。比如: 該圖中,第3大的值是10. 分析: 我們可以通過類似中序遍歷的方法把BST從大到小排序,然後,就可以得到第 k 大的值了。程式碼如下: public class NthNode { // k r