我先說下思路,等下可以詳細講
創(chuàng)新互聯(lián)建站制作網(wǎng)站網(wǎng)頁找三站合一網(wǎng)站制作公司,專注于網(wǎng)頁設(shè)計,成都做網(wǎng)站、網(wǎng)站建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè),網(wǎng)站設(shè)計,企業(yè)網(wǎng)站搭建,網(wǎng)站開發(fā),建網(wǎng)站業(yè)務(wù),680元做網(wǎng)站,已為上千余家服務(wù),創(chuàng)新互聯(lián)建站網(wǎng)站建設(shè)將一如既往的為我們的客戶提供最優(yōu)質(zhì)的網(wǎng)站建設(shè)、網(wǎng)絡(luò)營銷推廣服務(wù)!
第一種方法你可以用一個自定義的分隔函數(shù)(表值函數(shù))去得到001,002,003的三行記錄
方法二:你可以逆向處理,如
select * from B
where (select top 1 A.U_NO+',' from A) like B.U_NO+','
加','是為了不會匹配錯誤
附上一個字符串分隔函數(shù):
create function Split(@STR varchar(max),@Separator varchar(1000))
RETURNS @T TABLE(ID varchar(1000))
begin
if(len(@Separator)=0)
set @Separator=','
DECLARE @TName VARCHAR(1000)
SELECT @STR=RTRIM(@STR)+@Separator
WHILE CHARINDEX(@Separator,@STR)0
BEGIN
SELECT @TName=LEFT(@STR,CHARINDEX(@Separator,@STR)-1)
SELECT @STR=STUFF(@STR,1,CHARINDEX(@Separator,@STR),'')
insert into @T(ID)values(@TName)
END
RETURN
end
go
返回一個新的字符串,它是此字符串的一個子字符串。該子字符串始于指定索引處的字符,一直到此字符串索引末尾。在SQLserver數(shù)據(jù)庫中,用于截取字符串的某部分。
subString的用法
public static void main(String[] args) {
// substring(beginIndex,endindex); 根據(jù)索引用來截取 String 類型的值 返回一個新的字符串
// 參數(shù): beginIndex - 開始處的索引(包括)。
// endindex 結(jié)尾處索引(不包括)。
String s="abcdef"; //重
s= s.substring(1,5);
System.out.println(s);
}
substring雙語例句
The Substring function will extract text from a source string.
Substring函數(shù)將從一個源字符串中提取文本。
Improved Algorithm for BM String Matching Based on Prefix Substring
基于前綴的BM串匹配改進算法
Scalable Distributed Data Structure for Substring Searching
具有子串檢索功能的可擴展分布式數(shù)據(jù)結(jié)構(gòu)
Returns the index of the first character of a specified substring in a string.
返回指定子串首字符在串中的索引。
The length argument specifies the length of the desired substring.
長度參數(shù)指定了所需子字符串的長度。
mysql:positon(substr,str) 返回子串substr在str中第一次出現(xiàn)的位置
oracle:instr(c1,c2,I,J)
c1:被搜索的子串
c2:希望搜索的字符串
I:搜索開始位置,默認為1
J:第幾次出現(xiàn),默認為1
sqlserver:charindex(p1,p2,p3)返回字符串中某個指定的子串出現(xiàn)的開始位置
P1:要找尋的子串
p2:被搜索的字符串
p3:搜索開始位置
不知道你用的是什么數(shù)據(jù)庫,其它數(shù)據(jù)庫我不熟,你自己在網(wǎng)上找找資料吧
不同的數(shù)據(jù)庫,相應(yīng)的字符串拼接方式不同,通過對比加深一下記憶。
一、MySQL字符串拼接
1、CONCAT函數(shù)
語法格式:CONCAT(char c1, char c2, ..., char cn) ,其中char代表字符串,定長與不定長均可以
連接兩個字符串
連接多個字符串
2、"+"操作符
連接兩個字符串
連接多個字符串
3、假如其中一個字段為NULL,則用結(jié)果用空格代替NULL。
二、Oracle字符串拼接
1、CONCAT函數(shù)
語法格式:CONCAT(char c1, char c2) ,其中char代表字符串,定長與不定長均可以
連接兩個字符串
連接多個字符串
使用CONCAT函數(shù)的嵌套實現(xiàn)。
2、"||"操作符
連接兩個字符串
連接多個字符串
3、假如其中一個字段為NULL,則用結(jié)果用空格代替NULL。
擴展資料
字符串函數(shù)(String processing function)也叫字符串處理函數(shù),指的是編程語言中用來進行字符串處理的函數(shù),如C,pascal,Visual以及LotusScript中進行字符串拷貝,計算長度,字符查找等的函數(shù)。
字符串主要用于編程,概念說明、函數(shù)解釋、用法詳述見正文,這里補充一點:字符串在存儲上類似字符數(shù)組,所以它每一位的單個元素都是可以提取的,如s=“abcdefghij”,則s[1]=“a”,s[10]="j"。
而字符串的零位正是它的長度,如s[0]=10(※上述功能Ansistring沒有。),這可以給我們提供很多方便,如高精度運算時每一位都可以轉(zhuǎn)化為數(shù)字存入數(shù)組。
字符串函數(shù)的應(yīng)用
1、連接運算 concat(s1,s2,s3…sn) 相當于s1+s2+s3+…+sn.
例:concat(‘11’,'aa’)='11aa’;
2、求子串。 Copy(s,I,I) 從字符串s中截取第I個字符開始后的長度為l的子串。
例:copy(‘a(chǎn)bdag’,2,3)=’bda’
3、刪除子串。過程 Delete(s,I,l) 從字符串s中刪除第I個字符開始后的長度為l的子串。
例:s:=’abcde’;delete(s,2,3);結(jié)果s:=’ae’
4、插入子串。 過程Insert(s1,s2,I) 把s1插入到s2的第I個位置
例:s:=abc;insert(‘12’,s,2);結(jié)果s:=’a12bc’
5、求字符串長度 length(s) 例:length(‘12abc’)=5
在ASP中 求字符串長度用 len(s)例: len("abc12")=5
6、搜索子串的位置 pos(s1,s2) 如果s1是s2的子串 ,則返回s1的第一個字符在s2中的位置,若不是子串,則返回0.
例:pos(‘a(chǎn)b’,’12abcd’)=3
7、字符的大寫轉(zhuǎn)換。Upcase(ch) 求字符ch的大寫體。
例:upcase(‘a(chǎn)’)=’A’
8、數(shù)值轉(zhuǎn)換為數(shù)串。 過程 Str(x,s) 把數(shù)值x化為數(shù)串s.
例:str(12345,s); 結(jié)果s=’12345’
9、數(shù)串轉(zhuǎn)換為數(shù)值。 過程val(s,x,I) 把數(shù)串s轉(zhuǎn)化為數(shù)值x,如果成功則I=0,不成功則I為無效字符的序數(shù),第三個參數(shù)也可不傳
例:val(‘1234’,x,I);結(jié)果 x:=1234
參考資料:百度百科?字符串函數(shù)的應(yīng)用
常用的字符串函數(shù),其作用可分為四大類:串接字符、截取字符、轉(zhuǎn)換字符、其他作用的字符函數(shù)。
串接,就是把單獨的字符串組合為一個。如把人的姓和名串接在一起形成一個完整的姓名字符串。
截取,是指從字符串里提取出一部分字符,形成子串。可以分為截取字符、提取字符的位置。
轉(zhuǎn)換,是指把一個字符串中的內(nèi)容或形式變換成另一個內(nèi)容或形式。分為內(nèi)容轉(zhuǎn)換和形式轉(zhuǎn)換。
其他作用的字符函數(shù):以上三種作用之外的其他字符函數(shù)。
下面詳細介紹。
串接函數(shù)
可以通過+或者-,實現(xiàn)串接操作。在不同的數(shù)據(jù)庫管理系統(tǒng)中,使用的串接符號不同。
在SQL SERVER中的代碼為:SELECT ‘JOHN’+ ‘SON’
在MySQL中的代碼為:SELECT CONCAT(‘JHON’,‘SON’)
截取函數(shù)
1、SUBSTR(COLUMN NAME,STARING POSITION,LENGTH)
COLUMN NAME:字段名稱
STARING POSITION:起始位置,即從第幾個字符開始截取
LENGTH:長度,即截取多少個字符的長度
select emp_id,substr(emp_id,1,3) from employee
從雇員表中檢索出雇員編號,雇員姓名兩個字段。其中雇員姓名可通過從編號ID的前三個字符截取得到。
2、TRIM()、LTRIM()、RTRIM(),剪除字符串中的字符。
SQL 中的 TRIM 函數(shù)是用來移除掉一個字串中的字頭或字尾。最常見的用途是移除字首或字尾的空白。這個函數(shù)在不同的資料庫中有不同的名稱:
MySQL: TRIM( ), RTRIM( ), LTRIM( )
Oracle: RTRIM( ), LTRIM( )
SQL Server: RTRIM( ), LTRIM( )
各種 trim 函數(shù)的語法如下:
TRIM ( [ [位置] [要移除的字串] FROM ] 字串): [位置] 的可能值為 LEADING (起頭), TRAILING (結(jié)尾), or BOTH (起頭及結(jié)尾)。 這個函數(shù)將把 [要移除的字串] 從字串的起頭、結(jié)尾,或是起頭及結(jié)尾移除。如果我們沒有列出 [要移除的字串] 是什么的話,那空白就會被移除。
LTRIM(字串): 將所有字串起頭的空白移除。
RTRIM(字串): 將所有字串結(jié)尾的空白移除
declare @str varchar(max)='6688 sasaaaa wty',@sql varchar(max)
set @sql='select * from mingTest where 1=0 '
;with cte as(select name=SUBSTRING(A.[str],number,CHARINDEX(' ',A.[str]+' ',number)-number) from A JOIN master..spt_values ON type='p' and number between 1 and LEN(@str)
WHERE CHARINDEX(' ',' '+A.[str],number)=number)
select @sql=@sql+'or [str] like ''%'+name+'%''' from cte where name''
EXEC @sql