Slq Server 函式大全

iSQlServer發表於2009-11-26

SQL Server字串處理函式大全

 select語句中只能使用sql函式對欄位進行操作(連結sql server),

select 欄位1 from 表1 where 欄位1.IndexOf("雲")=1;
這條語句不對的原因是indexof()函式不是sql函式,改成sql對應的函式就可以了。
left()是sql函式。
select 欄位1 from 表1 where charindex('雲',欄位1)=1; 字串函式對二進位制資料、字串和表示式執行不同的運算。此類函式作用於CHAR、VARCHAR、 BINARY、 和VARBINARY 資料型別以及可以隱式轉換為CHAR 或VARCHAR的資料型別。可以在SELECT 語句的SELECT 和WHERE 子句以及表示式中使用字串函式。
常用的字串函式有:

一、字元轉換函式
1、ASCII()
返回字元表示式最左端字元的ASCII 碼值。在ASCII()函式中,純數字的字串可不用‘’括起來,但含其它字元的字串必須用‘’括起來使用,否則會出錯。
2、CHAR()
將ASCII 碼轉換為字元。如果沒有輸入0 ~ 255 之間的ASCII 碼值,CHAR() 返回NULL 。
3、LOWER()和UPPER()
LOWER()將字串全部轉為小寫;UPPER()將字串全部轉為大寫。
4、STR()
把數值型資料轉換為字元型資料。
STR ([,length[, ]])
length 指定返回的字串的長度,decimal 指定返回的小數位數。如果沒有指定長度,預設的length 值為10, decimal 預設值為0。
當length 或者decimal 為負值時,返回NULL;
當length 小於小數點左邊(包括符號位)的位數時,返回length 個*;
先服從length ,再取decimal ;
當返回的字串位數小於length ,左邊補足空格。
二、去空格函式
1、LTRIM() 把字串頭部的空格去掉。

2、RTRIM() 把字串尾部的空格去掉。

三、取子串函式
1、left()
LEFT ()
返回character_expression 左起 integer_expression 個字元。

2、RIGHT()
RIGHT ()
返回character_expression 右起 integer_expression 個字元。

3、SUBSTRING()
SUBSTRING (, length)
返回從字串左邊第starting_ position 個字元起length個字元的部分。

四、字串比較函式
1、CHARINDEX()
返回字串中某個指定的子串出現的開始位置。
CHARINDEX (, )
其中substring _expression 是所要查詢的字元表示式,expression 可為字串也可為列名錶達式。如果沒有發現子串,則返回0 值。
此函式不能用於TEXT 和IMAGE 資料型別。
2、PATINDEX()
返回字串中某個指定的子串出現的開始位置。
PATINDEX (, )其中子串表示式前後必須有百分號“%”否則返回值為0。
與CHARINDEX 函式不同的是,PATINDEX函式的子串中可以使用萬用字元,且此函式可用於CHAR、 VARCHAR 和TEXT 資料型別。

五、字串操作函式
1、QUOTENAME()
返回被特定字元括起來的字串。
QUOTENAME ([, quote_ character]) 其中quote_ character 標明括字串所用的字元,預設值為“[]”。
2、REPLICATE()
返回一個重複character_expression 指定次數的字串。
REPLICATE (character_expression integer_expression) 如果integer_expression 值為負值,則返回NULL 。

3、REVERSE()
將指定的字串的字元排列順序顛倒。
REVERSE () 其中character_expression 可以是字串、常數或一個列的值。

4、REPLACE()
返回被替換了指定子串的字串。
REPLACE () 用string_expression3 替換在string_expression1 中的子串string_expression2。

4、SPACE()
返回一個有指定長度的空白字串。
SPACE () 如果integer_expression 值為負值,則返回NULL 。

5、STUFF()
用另一子串替換字串指定位置、長度的子串。
STUFF ()
如果起始位置為負或長度值為負,或者起始位置大於character_expression1 的長度,則返回NULL 值。
如果length 長度大於character_expression1 中 start_ position 以右的長度,則character_expression1 只保留首字元。
六、資料型別轉換函式
1、CAST()
CAST ( AS [ length ])

2、CONVERT()
CONVERT ([ length ], [, style])

1)data_type為SQL Server系統定義的資料型別,使用者自定義的資料型別不能在此使用。
2)length用於指定資料的長度,預設值為30。
3)把CHAR或VARCHAR型別轉換為諸如INT或SAMLLINT這樣的INTEGER型別、結果必須是帶正號或負號的數值。
4)TEXT型別到CHAR或VARCHAR型別轉換最多為8000個字元,即CHAR或VARCHAR資料型別是最大長度。
5)IMAGE型別儲存的資料轉換到BINARY或VARBINARY型別,最多為8000個字元。
6)把整數值轉換為MONEY或SMALLMONEY型別,按定義的國家的貨幣單位來處理,如人民幣、美元、英鎊等。
7)BIT型別的轉換把非零值轉換為1,並仍以BIT型別儲存。
8)試圖轉換到不同長度的資料型別,會截短轉換值並在轉換值後顯示“+”,以標識發生了這種截斷。
9)用CONVERT()函式的style. 選項能以不同的格式顯示日期和時間。style. 是將DATATIME 和SMALLDATETIME 資料轉換為字串時所選用的由SQL Server 系統提供的轉換樣式編號,不同的樣式編號有不同的輸出格式。
七、日期函式
1、day(date_expression)
返回date_expression中的日期值

2、month(date_expression)
返回date_expression中的月份值

3、year(date_expression)
返回date_expression中的年份值

4、DATEADD()
DATEADD ()
返回指定日期date 加上指定的額外日期間隔number 產生的新日期。
5、DATEDIFF()
DATEDIFF ()
返回兩個指定日期在datepart 方面的不同之處,即date2 超過date1的差距值,其結果值是一個帶有正負號的整數值。

6、DATENAME()
DATENAME ()
以字串的形式返回日期的指定部分此部分。由datepart 來指定。

7、DATEPART()
DATEPART ()
以整數值的形式返回日期的指定部分。此部分由datepart 來指定。
DATEPART (dd, date) 等同於DAY (date)
DATEPART (mm, date) 等同於MONTH (date)
DATEPART (yy, date) 等同於YEAR (date)

8、GETDATE()
以DATETIME 的預設格式返回系統當前的日期和時間。

 

--聚合函式
use pubs
go
select avg(distinct price)  --算平均數
from titles
where type='business'
go 
use pubs
go
select max(ytd_sales)  --最大數
from titles
go 

use pubs
go
select min(ytd_sales) --最小數
from titles
go 

use pubs
go
select type,sum(price),sum(advance)  --求和
from titles
group by type
order by type
go 

use pubs
go 
select count(distinct city)  --求個數
from authors
go 

use pubs
go
select stdev(royalty) --返回給定表示式中所有值的統計標準偏差
from titles
go 

use pubs
go
select stdevp(royalty) --返回表示式中所有制的填充統計標準偏差
from titles
go 

use pubs
go
select var(royalty) --返回所有值的統計方差
from titles
go 

use pubs
go
select varp(royalty) --返回所有值的填充的統計方差
from titles
go 

--數學函式 

select sin(23.45),atan(1.234),rand(),PI(),sign(-2.34--其中rand是獲得一個隨機數
--
配置函式
SELECT @@VERSION --獲取當前資料庫版本
SELECT @@LANGUAGE --當前語言
--
時間函式
select getdate() as 'wawa_getdate' --當前時間
select getutcdate() as 'wawa_getutcdate' --獲取utc時間
select day(getdate()) as 'wawa_day' --取出天
select month(getdate()) as 'wawa_month' --取出月
select year(getdate()) as 'wawa_year' --取出年
select dateadd(d,3,getdate()) as wawa_dateadd --加三天,注意'd'表示天,'m'表示月,'yy'表示年,下面一樣
select datediff(d,'2004-07-01','2004-07-15'as wawa_datediff --計算兩個時間的差
select datename(d,'2004-07-15'as wawa_datename --取出時間的某一部分
select datepart(d,getdate()) as wawa_datepart  --取出時間的某一部分,和上面的那個差不多
--
字串函式
select ascii(123as '123',ascii('123'as '"123"',ascii('abc'as '"abc"' --轉換成ascii碼
select char(123),char(321),char(-123--根據ascii轉換成字元
select lower('ABC'),lower('Abc'),upper('Abc'),upper('abc'--轉換大小寫
select str(123.45,6,1), str(123.45,2,2--把數值轉換成字串
select ltrim('    "左邊沒有空格"')  --去空格
select rtrim('"右邊沒有空格"     '--去空格
select ltrim(rtrim('   "左右都沒有空格"    ')) --去空格
select left('sql server',3),right('sql server',6--取左或者取右 

use pubs
select au_lname,substring(au_fname,1,1--取子串
from authors
order by au_lname 

select charindex('123','abc123def',2--返回字串中指定表示式的起始位置
select patindex('123','abc123def'),patindex('%123%','abc123def'--返回表示式中某模式第一次出現的起始位置
select quotename('abc','{'),quotename('abc'--返回由指定字元擴住的字串
select reverse('abc'),reverse('上海'--顛倒字串順序
select replace('abcdefghicde','cde','xxxx'--返回唄替換了指定子串的字串
select space(5),space(-2

--系統函式
select host_name() as 'host_name',host_id() as 'host_id',user_name() as 'user_name',user_id() as 'user_id',db_name() as 'db_name'
--變數的定義使用
--
宣告區域性變數
declare @mycounter int
declare @last_name varchar(30),@fname varchar(20),@state varchar(2--一下宣告多個變數
--
給變數賦值
use northwind
go
declare @firstnamevariable varchar(20),
 
@regionvariable varchar(30)
set @firstnamevariable='anne' --可以用set,也可以用select給變數賦值,微軟推薦用set,但select在選擇一個值直接賦值時很有用
set @regionvariable ='wa' 

select lastname,firstname,title  --用宣告並賦值過的變數構建一個Select語句並查詢
from employees
where firstname= @firstnamevariable or region=@regionvariable
go
--全域性變數
select @@version  --返回資料庫版本
select @@error  --返回最後的一次指令碼錯誤
select @@identity  --返回最後的一個自動增長列的id 

--while,break,continue的使用
--
首先計算所有數的平均價格,如果低於30的話進入迴圈讓所有的price翻倍,
--
裡面又有個if來判斷如果最大的單價還大於50的話,退出迴圈,否則繼續迴圈,知道最大單價大於50就break出迴圈,呵呵,
--
我分析的應該對吧.
use pubs
go
while (select avg(price) from titles) <$30 
begin
 
update titles
  
set price=price*2
  
select max(price) from titles
  
if(select max(price) from titles) >$50
  
break
  
else
  
continue
end
print 'too much for the marker to bear' 

--事務程式設計經典例子
--
begin transaction是開始事務,commit transaction是提交事務,rollback transaction是回滾事務
--
這個例子是先插入一條記錄,如果出現錯誤的話就回滾事務,也就是取消,並直接return(返回),如果沒錯的話就commit 提交這個事務了哦
--
上面的那個return返回可以返回一個整數值,如果這個值是0的話就是執行的時候沒出錯,如果出錯了就是一個負數,
--
這個return也可以用在儲存過程中,可用用 exec @return_status= pro_name來獲取這個值
use pubs
go
begin tran mytran
 
insert into stores(stor_id,stor_name)
  
values('333','my books')
 
go
 
insert into discounts(discounttype,stor_id,discount)
  
values('清倉甩賣','9999',50.00)
 
if @@error<>0
  
begin
   
rollback tran mytran
   
print '插入打折記錄出錯'
   
return
  
end
commit tran mytran 

--事務處理的儲存點示例
--
做了事務儲存點後可以rollback(回滾)到指定的儲存點,不至於所有的操作都不能用
use pubs
go
select * from stores
begin transaction testsavetran
 
insert into stores(stor_id,stor_name)
  
values('1234','W.Z.D Book')
 
save transaction before_insert_data2
 
go
 
insert into stores(stor_id,stor_name)
  
values('5678','foreat Books')
 
go
rollback transaction before_insert_data2
select * from stores 

--儲存儲存過程
use pubs
if exists(select name from sysobjects where name= 'proc_calculate_taxes' and type='P')
 
drop procedure proc_calculate_taxes
go
create procedure proc_calculate_taxes (@p1 smallint=42,@p2 char(1),@p3 varchar(8)='char')
as
select *
from titles
--執行過程
EXECUTE PROC_CALCULATE_TAXES @P2='A'

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-620632/,如需轉載,請註明出處,否則將追究法律責任。

相關文章