今日碰到個(gè)問題:要實(shí)現(xiàn)數(shù)據(jù)表中的一個(gè)字段中的文本為"xxx.gif"的轉(zhuǎn)換為"xxx.jpg",我不知道其具體名稱喳逛,只知道是以gif結(jié)尾瞧捌。
問題解決:update pet set petPhoto=substring(petPhoto,1,datalength(petPhoto)-3)+'jpg'
where petPhoto like '%.gif'
注意匹配符:“%”為匹配任意長度任意字符,“_”匹配單個(gè)任意字符,[A]匹配以A開頭的润文,[^A]匹配除開以A開頭的姐呐。知道函數(shù)是解決問題的關(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) 絕對值
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() 大小寫轉(zhuǎn)換
str(a,b,c)轉(zhuǎn)換數(shù)字為字符串。 a,是要轉(zhuǎn)換的字符串截驮。b是轉(zhuǎn)換以后的長度笑陈,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)的位置眶熬,沒有返回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是開始位置块请,3是要從原來串中刪除的字符長度娜氏,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指定對那一部分加贸弥,number知道加多少,date指定在誰的基礎(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)
備注說明:
Len函數(shù):
計(jì)算字符串長度的函數(shù),這個(gè)函數(shù)與oracle和db2函數(shù)不一樣问慎,那兩個(gè)數(shù)據(jù)庫用的是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ù):
查找字符串的位置:
語法為: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ù)
語法為: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ù)主要是返回字符串的大小寫猴仑,這兩個(gè)函數(shù)與db2和oracle數(shù)據(jù)庫函數(shù)的使用一樣审轮。
select lower('zainzhu') as char
select upper('zainzhu') as char
ltrim和rtrim函數(shù):
ltrim函數(shù)去掉左邊空格,rtrim函數(shù)去掉右邊空格辽俗。但ms sqlserver沒有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ù)按照逆序顯示出來崖飘。
select reverse('zainzhu')
字符串連接:
sqlserver字符串連接是用+連接多個(gè)字符串榴捡,這個(gè)與其它數(shù)據(jù)庫有點(diǎn)不一樣,其他數(shù)據(jù)庫用的是||
select 'A'+'b' as char
SUBSTRING函數(shù):
截取字符串函數(shù)朱浴,語法為:substring(str吊圾,index,len)
就是截取從字符串的第index位置開始翰蠢,截取len長度的字符串项乒。
select substring('zainzhu',2,3) as char
replace函數(shù)
這個(gè)函數(shù)為替換函數(shù),語法格式為:replace(str梁沧,str1檀何,str2)
就是用str2去替換字符串str中str1,然后返回一個(gè)新的字符串。
select replace('zainzhu','zhu','it')
isnull函數(shù):
這是關(guān)于空值的函數(shù)频鉴,語法格式為isnull(str1,str2)
如果字符串表達(dá)式str1為空栓辜,就返回字符串表達(dá)式str2。
否則就返回字符串表達(dá)式str1
注解:sqlserver中''不表示空垛孔,它不等同于null藕甩,這個(gè)和db2一樣。
select isnull(null,'zain') as char
coalesce函數(shù):
該返回不是null的第一個(gè)字符串周荐,
語法格式為: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è)字符串的開始位置刪除指定長度的字符仆嗦;然后將第二個(gè)字符串插入到第一個(gè)字符串的開始位置辉阶。可用于刪除字符瘩扼,截取字符谆甜,替換字符
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>,我們可以通過path后面的參數(shù)改變根節(jié)點(diǎn)名稱:
select teacher,object from teach for xml path('記錄')
一個(gè)小技巧: 可以通過path('')來去掉根節(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