今日碰到個(gè)問(wèn)題:要實(shí)現(xiàn)數(shù)據(jù)表中的一個(gè)字段中的文本為"xxx.gif"的轉(zhuǎn)換為"xxx.jpg",我不知道其具體名稱,只知道是以gif結(jié)尾。
問(wèn)題解決:update pet set petPhoto=substring(petPhoto,1,datalength(petPhoto)-3)+'jpg'
where petPhoto like '%.gif'
注意匹配符:“%”為匹配任意長(zhǎng)度任意字符,“_”匹配單個(gè)任意字符,[A]匹配以A開(kāi)頭的,[^A]匹配除開(kāi)以A開(kāi)頭的。知道函數(shù)是解決問(wèn)題的關(guān)鍵(以下轉(zhuǎn)自網(wǎng)絡(luò)):
1,統(tǒng)計(jì)函數(shù) avg, count, max, min, sum
2, 數(shù)學(xué)函數(shù)
ceiling(n) 返回大于或者等于n的最小整數(shù)
floor(n), 返回小于或者是等于n的最大整數(shù)
round(m,n), 四舍五入,n是保留小數(shù)的位數(shù)
abs(n) 絕對(duì)值
sign(n), 當(dāng)n>0, 返回1,n=0,返回0,n<0, 返回-1
PI(), 3.1415....
rand(),rand(n), 返回0-1之間的一個(gè)隨機(jī)數(shù)
3,字符串函數(shù)
ascii(), 將字符轉(zhuǎn)換為ASCII碼, ASCII('abc') = 97
char(), ASCII 碼 轉(zhuǎn)換為 字符
lower(),upper() 大小寫(xiě)轉(zhuǎn)換
str(a,b,c)轉(zhuǎn)換數(shù)字為字符串。 a,是要轉(zhuǎn)換的字符串。b是轉(zhuǎn)換以后的長(zhǎng)度,c是小數(shù)位數(shù)。str(123.456,8,2) = 123.46
ltrim(), rtrim() 去空格 ltrim去左邊的空格,rtrim去右邊的空格
left(n), right(n), substring(str, start,length) 截取字符串
charindex(子串,母串),查找是否包含。 返回第一次出現(xiàn)的位置,沒(méi)有返回0
patindex('%pattern%', expression) 功能同上,可是使用通配符
replicate('char', rep_time), 重復(fù)字符串
reverse(char),顛倒字符串
replace(str, strold, strnew) 替換字符串
space(n), 產(chǎn)生n個(gè)空行
stuff(), SELECT STUFF('abcdef', 2, 3, 'ijklmn') ='aijklmnef', 2是開(kāi)始位置,3是要從原來(lái)串中刪除的字符長(zhǎng)度,ijlmn是要插入的字符串。
3,類型轉(zhuǎn)換函數(shù):
cast, cast( expression as data_type), Example:
SELECT SUBSTRING(title, 1, 30) AS Title, ytd_sales FROM titles WHERE CAST(ytd_sales AS char(20)) LIKE '3%'
convert(data_type, expression)
4,日期函數(shù)
day(), month(), year()
dateadd(datepart, number, date), datapart指定對(duì)那一部分加,number知道加多少,date指定在誰(shuí)的基礎(chǔ)上加。datepart的取值包括,year,quarter,month,dayofyear,day,week,hour,minute,second,比如明天dateadd(day,1, getdate())
datediff(datepart,date1,date2). datapart和上面一樣。整個(gè)函數(shù)結(jié)果是date2 - date1
datename(datepart, date) 取那一部分,返回字符串。
datepart(datepart, date) 取一部分,返回整數(shù)。
getdate()當(dāng)前時(shí)間
5,系統(tǒng)函數(shù)
col_length('tablename','colname')
col_name, SELECT COL_NAME(OBJECT_ID('Employees'), 1) = EmployeeID
datalength, example: datalenght('abc') =3, datalength(pub_name) --列名
len,
for xml path('') 轉(zhuǎn)換成xml值,并去除根節(jié)點(diǎn)
備注說(shuō)明:
Len函數(shù):
計(jì)算字符串長(zhǎng)度的函數(shù),這個(gè)函數(shù)與oracle和db2函數(shù)不一樣,那兩個(gè)數(shù)據(jù)庫(kù)用的是length,而sqlserver用的是LEN
select len('aaa') as length
ascii函數(shù):
這個(gè)函數(shù)返回字符串中最左側(cè)的字符的ASCII 碼,如果是一個(gè)字符的話,那就返回該字符的ASCII 碼,如果是多個(gè)字符的話,那就返回最左邊字符的ASCII 碼
select ascii('a') as ascii
charindex函數(shù):
查找字符串的位置:
語(yǔ)法為:charindex(字符串表達(dá)式 1, 字符串表達(dá)式2,[整數(shù)表達(dá)式])
該函數(shù)用法為:在字符串2 中查找字符串 1,如果存在就返回第一個(gè)匹配的位置,如果不存在返回0。如果字符串 1 和字符串 2 中有一個(gè)是null 則返回 null。后面的整數(shù)為字符串2 中查找的起始位置
select charindex('zain','zhuzainming') as chariindexs
left和right函數(shù)
語(yǔ)法為:left(str,index),在字符串str中返回左邊index個(gè)字符,
right(str,index),在字符串str中返回右邊index個(gè)字符
select left('zainzhu',2) as charindexs
select right('zainzhu',2) as charindexs
lower和upper函數(shù)
該函數(shù)主要是返回字符串的大小寫(xiě),這兩個(gè)函數(shù)與db2和oracle數(shù)據(jù)庫(kù)函數(shù)的使用一樣。
select lower('zainzhu') as char
select upper('zainzhu') as char
ltrim和rtrim函數(shù):
ltrim函數(shù)去掉左邊空格,rtrim函數(shù)去掉右邊空格。但ms sqlserver沒(méi)有trim函數(shù),這個(gè)與db2和oracle還是有點(diǎn)不一樣的
select ltrim(' zainzhu') as char
select rtrim('zainzhu ') as char
select 'zainzhu '
reverse函數(shù):
這個(gè)函數(shù)是反轉(zhuǎn)函數(shù),就是將函數(shù)按照逆序顯示出來(lái)。
select reverse('zainzhu')
字符串連接:
sqlserver字符串連接是用+連接多個(gè)字符串,這個(gè)與其它數(shù)據(jù)庫(kù)有點(diǎn)不一樣,其他數(shù)據(jù)庫(kù)用的是||
select 'A'+'b' as char
SUBSTRING函數(shù):
截取字符串函數(shù),語(yǔ)法為:substring(str,index,len)
就是截取從字符串的第index位置開(kāi)始,截取len長(zhǎng)度的字符串。
select substring('zainzhu',2,3) as char
replace函數(shù)
這個(gè)函數(shù)為替換函數(shù),語(yǔ)法格式為:replace(str,str1,str2)
就是用str2去替換字符串str中str1,然后返回一個(gè)新的字符串。
select replace('zainzhu','zhu','it')
isnull函數(shù):
這是關(guān)于空值的函數(shù),語(yǔ)法格式為isnull(str1,str2)
如果字符串表達(dá)式str1為空,就返回字符串表達(dá)式str2。
否則就返回字符串表達(dá)式str1
注解:sqlserver中''不表示空,它不等同于null,這個(gè)和db2一樣。
select isnull(null,'zain') as char
coalesce函數(shù):
該返回不是null的第一個(gè)字符串,
語(yǔ)法格式為:COALESCE (expression_1, expression_2, ...,expression_n)
用法為函數(shù)列表中第一個(gè)非空的表達(dá)式是函數(shù)的返回值,如果所有的表達(dá)式都是空值,最終將返回一個(gè)空值
select coalesce(null,null,'zain')
convert函數(shù):
數(shù)據(jù)類型的轉(zhuǎn)換,利用這個(gè)函數(shù)我們可以進(jìn)行任何數(shù)據(jù)的轉(zhuǎn)變。
select convert(varchar,getdate(),20) as char
cast函數(shù):
select cast('12' as int)
stuff函數(shù);
STUFF 函數(shù)將字符串插入到另一個(gè)字符串中。 它從第一個(gè)字符串的開(kāi)始位置刪除指定長(zhǎng)度的字符;然后將第二個(gè)字符串插入到第一個(gè)字符串的開(kāi)始位置。可用于刪除字符,截取字符,替換字符
select stuff('zainzhu',1,1,'') as char
select stuff('zainzhu',1,1,'aaaa') as char
for xml path函數(shù):
select teacher,object from teach for xml path
根節(jié)點(diǎn)默認(rèn)是<row></row>,我們可以通過(guò)path后面的參數(shù)改變根節(jié)點(diǎn)名稱:
select teacher,object from teach for xml path('記錄')
一個(gè)小技巧: 可以通過(guò)path('')來(lái)去掉根節(jié)點(diǎn)
select teacher,object from teach for xml path('')
select teacher as '老師',
(select object+',' from teach t1 where t1.teacher=t2.teacher FOR xml path ('')) as '學(xué)科'
from teach t2
group by teacher