本文的部分內(nèi)容從網(wǎng)上查找得到的,并給出了原文地址。
一 常用函數(shù)(function)
1 數(shù)據(jù)類型轉(zhuǎn)換函數(shù)
CAST ( expression AS data_type ) -- 將某種數(shù)據(jù)類型的表達(dá)式顯式轉(zhuǎn)換為另一種數(shù)據(jù)類型
CONVERT (data_type[(length)], expression [, style])-- 將某種數(shù)據(jù)類型的表達(dá)式顯式轉(zhuǎn)換為另一種數(shù)據(jù)類型
2 統(tǒng)計函數(shù)
AVG -- 返回組中值的平均值??罩祵⒈缓雎浴?br> COUNT--返回組中項(xiàng)目的數(shù)量。
MAX--返回表達(dá)式的最大值。
MIN--返回表達(dá)式的最小值。
SUM--返回表達(dá)式中所有值的和,或只返回 DISTINCT 值。SUM 只能用于數(shù)字列。空值將被忽略。
STDEV()
--STDEV()函數(shù)返回表達(dá)式中所有數(shù)據(jù)的標(biāo)準(zhǔn)差
--STDEVP()
--STDEVP()函數(shù)返回總體標(biāo)準(zhǔn)差
VAR()
--VAR()函數(shù)返回表達(dá)式中所有值的統(tǒng)計變異數(shù)
VARP()
--VARP()函數(shù)返回總體變異數(shù)
3 數(shù)學(xué)函數(shù)
(1) 取近似值函數(shù)
SQRT( float_expression )--返回給定表達(dá)式的平方根。
CEILING( numeric_expression )--返回大于或等于所給數(shù)字表達(dá)式的最小整數(shù)。
FLOOR( numeric_expression )--返回小于或等于所給數(shù)字表達(dá)式的最大整數(shù)。
ROUND(numeric_expression , length)--返回數(shù)字表達(dá)式并四舍五入為指定的長度或精度。
SIGN( numeric_expression )--返回給定表達(dá)式的正 (+1)、零 (0) 或負(fù) (-1) 號。
ABS ( numeric_expression )--返回給定數(shù)字表達(dá)式的絕對值。
PI(), 返回 PI 的常量值。
RAND(), RAND( seed )返回 0 到1 之間的隨機(jī)float 值。
(2)三角函數(shù)
SIN(float_expression)--返回以弧度表示的角的正弦
COS(float_expression)--返回以弧度表示的角的余弦
TAN(float_expression)--返回以弧度表示的角的正切
COT(float_expression)--返回以弧度表示的角的余切
(3)反三角函數(shù)
ASIN(float_expression)--返回正弦是FLOAT值的以弧度表示的角
ACOS(float_expression)--返回余弦是FLOAT值的以弧度表示的角
ATAN(float_expression)--返回正切是FLOAT值的以弧度表示的角
ATAN2(float_expression1,float_expression2)--返回正切是float_expression1/float_expres-sion2的以弧度表示的角
DEGREES(numeric_expression)--當(dāng)給出以弧度為單位的角度時,返回相應(yīng)的以度數(shù)為單位的角度。
RADIANS(numeric_expression)------對于在數(shù)字表達(dá)式中輸入的度數(shù)值返回弧度值。
EXP(float_expression)--返回表達(dá)式的指數(shù)值
LOG(float_expression)--返回表達(dá)式的自然對數(shù)值
LOG10(float_expression)--返回表達(dá)式的以10為底的對數(shù)值
SQRT(float_expression)--返回表達(dá)式的平方根
4 字符串函數(shù)
ASCII ( character_expression )--返回字符表達(dá)式最左端字符的 ASCII 代碼值。
CHAR ( integer_expression )--將 int ASCII 代碼轉(zhuǎn)換為字符的字符串函數(shù)。
LOWER ( character_expression )--將大寫字符數(shù)據(jù)轉(zhuǎn)換為小寫字符數(shù)據(jù)后返回字符表達(dá)式。
UPPER ( character_expression )--返回將小寫字符數(shù)據(jù)轉(zhuǎn)換為大寫的字符表達(dá)式。
STR ( float_expression [ , length [ , decimal ] ] ) --由數(shù)字?jǐn)?shù)據(jù)轉(zhuǎn)換來的字符數(shù)據(jù)。
LTRIM( character_expression )--刪除起始空格后返回字符表達(dá)式。
RTRIM ( character_expression )--截斷所有尾隨空格后返回一個字符串。
LEFT ( character_expression , integer_expression ) --返回從字符串左邊開始指定個數(shù)的字符。
RIGHT ( character_expression , integer_expression ) --返回字符串中從右邊開始指定個數(shù)的 integer_expression 字符。
SUBSTRING ( expression , start , length )--截取字符串
CHARINDEX ( expression1 , expression2 [ , start_location ] ) --返回字符串中指定表達(dá)式的起始位置,沒有返回0
PATINDEX ( ‘%pattern%‘ , expression ) -- 返回指定表達(dá)式中某模式第一次出現(xiàn)的起始位置;如果在全部有效的文本和字符數(shù)據(jù)類型中沒有找到該模式,則返回零。
REPLICATE ( character_expression , integer_expression )-- 以指定的次數(shù)重復(fù)字符表達(dá)式。
REVERSE ( character_expression )-- 返回字符表達(dá)式的反轉(zhuǎn)。
REPLACE ( ‘string_expression1‘ , ‘string_expression2‘ , ‘string_expression3‘ )--用第三個表達(dá)式替換第一個字符串表達(dá)式中出現(xiàn)的所有第二個給定字符串表達(dá)式。
STUFF ( character_expression , start , length , character_expression )--刪除指定長度的字符并在指定的起始點(diǎn)插入另一組字符。
SPACE ( integer_expression )-- 返回由重復(fù)的空格組成的字符串。
5 日期函數(shù)
DAY()--函數(shù)返回date_expression中的日期值
MONTH()--函數(shù)返回date_expression中的月份值
YEAR()--函數(shù)返回date_expression中的年份值
DATEADD( datepart , number, date )--函數(shù)返回指定日期date加上指定的額外日期間隔number產(chǎn)生的新日期
DATEDIFF( datepart , startdate , enddate )--函數(shù)返回兩個指定日期在datepart方面的不同之處
DATENAME(datepart , date )------函數(shù)以字符串的形式返回日期的指定部分
DATEPART( datepart , date )--函數(shù)以整數(shù)值的形式返回日期的指定部分
GETDATE()------函數(shù)以DATETIME的缺省格式返回系統(tǒng)當(dāng)前的日期和時間
6 系統(tǒng)函數(shù)
APP_NAME()------函數(shù)返回當(dāng)前執(zhí)行的應(yīng)用程序的名稱
COALESCE()-----函數(shù)返回眾多表達(dá)式中第一個非NULL表達(dá)式的值
COL_LENGTH ( ‘table‘ , ‘column‘ ) ----函數(shù)返回表中指定字段的長度值
COL_NAME ( table_id , column_id )----返回數(shù)據(jù)庫列的名稱,該列具有相應(yīng)的表標(biāo)識號和列標(biāo)識號。
DATALENGTH()-----函數(shù)返回數(shù)據(jù)表達(dá)式的數(shù)據(jù)的實(shí)際長度
DB_ID ( [ ‘database_name‘ ] ) ------函數(shù)返回數(shù)據(jù)庫的編號
DB_NAME(database_id)------函數(shù)返回數(shù)據(jù)庫的名稱
HOST_ID()-----函數(shù)返回服務(wù)器端計算機(jī)的名稱
HOST_NAME()-----函數(shù)返回服務(wù)器端計算機(jī)的名稱
IDENTITY ( data_type [ , seed , increment ] ) AS column_name --IDENTITY()函數(shù)只在SELECTINTO語句中使用用于插入一個identitycolumn列到新表中
ISDATE()----函數(shù)判斷所給定的表達(dá)式是否為合理日期
ISNULL ( check_expression , replacement_value ) --函數(shù)將表達(dá)式中的NULL值用指定值替換
ISNUMERIC()----函數(shù)判斷所給定的表達(dá)式是否為合理的數(shù)值
NEWID()----函數(shù)返回一個UNIQUEIDENTIFIER類型的數(shù)值
NULLIF ( expression , expression )--NULLIF函數(shù)在expression1與expression2相等時返回NULL值若不相等時則返回xpression1的值
[來源: http://stevieliu.blogchina.com/stevieliu/4720568.html]
[參考《SQL Server聯(lián)機(jī)叢書》,略有修改]
二 SQL Server中各個系統(tǒng)表的作用
sysaltfiles 主數(shù)據(jù)庫 保存數(shù)據(jù)庫的文件
syscharsets 主數(shù)據(jù)庫 字符集與排序順序
sysconfigures 主數(shù)據(jù)庫 配置選項(xiàng)
syscurconfigs 主數(shù)據(jù)庫 當(dāng)前配置選項(xiàng)
sysdatabases 主數(shù)據(jù)庫 服務(wù)器中的數(shù)據(jù)庫
syslanguages 主數(shù)據(jù)庫 語言
syslogins 主數(shù)據(jù)庫 登陸賬號信息
sysoledbusers 主數(shù)據(jù)庫 鏈接服務(wù)器登陸信息
sysprocesses 主數(shù)據(jù)庫 進(jìn)程
sysremotelogins主數(shù)據(jù)庫 遠(yuǎn)程登錄賬號
syscolumns 每個數(shù)據(jù)庫 列
sysconstrains 每個數(shù)據(jù)庫 限制
sysfilegroups 每個數(shù)據(jù)庫 文件組
sysfiles 每個數(shù)據(jù)庫 文件
sysforeignkeys 每個數(shù)據(jù)庫 外部關(guān)鍵字
sysindexs 每個數(shù)據(jù)庫 索引
sysmenbers 每個數(shù)據(jù)庫 角色成員
sysobjects 每個數(shù)據(jù)庫 所有數(shù)據(jù)庫對象
syspermissions 每個數(shù)據(jù)庫 權(quán)限
systypes 每個數(shù)據(jù)庫 用戶定義數(shù)據(jù)類型
sysusers 每個數(shù)據(jù)庫 用戶
三 Transact_SQL
1 語法
語 句 功 能
(1) 數(shù)據(jù)操作
SELECT 從數(shù)據(jù)庫表中檢索數(shù)據(jù)行和列
INSERT 向數(shù)據(jù)庫表添加新數(shù)據(jù)行
DELETE 從數(shù)據(jù)庫表中刪除數(shù)據(jù)行
UPDATE 更新數(shù)據(jù)庫表中的數(shù)據(jù)
(2)數(shù)據(jù)定義
CREATE TABLE 創(chuàng)建一個數(shù)據(jù)庫表
DROP TABLE 從數(shù)據(jù)庫中刪除表
ALTER TABLE 修改數(shù)據(jù)庫表結(jié)構(gòu)
CREATE VIEW 創(chuàng)建一個視圖
DROP VIEW 從數(shù)據(jù)庫中刪除視圖
CREATE INDEX 為數(shù)據(jù)庫表創(chuàng)建一個索引
DROP INDEX 從數(shù)據(jù)庫中刪除索引
CREATE PROCEDURE 創(chuàng)建一個存儲過程
DROP PROCEDURE 從數(shù)據(jù)庫中刪除存儲過程
CREATE TRIGGER 創(chuàng)建一個觸發(fā)器
DROP TRIGGER 從數(shù)據(jù)庫中刪除觸發(fā)器
CREATE SCHEMA 向數(shù)據(jù)庫添加一個新模式
DROP SCHEMA 從數(shù)據(jù)庫中刪除一個模式
CREATE DOMAIN 創(chuàng)建一個數(shù)據(jù)值域
ALTER DOMAIN 改變域定義
DROP DOMAIN 從數(shù)據(jù)庫中刪除一個域
(3)數(shù)據(jù)控制
GRANT 授予用戶訪問權(quán)限
DENY 拒絕用戶訪問
REVOKE 解除用戶訪問權(quán)限
(4)事務(wù)控制
COMMIT 結(jié)束當(dāng)前事務(wù)
ROLLBACK 中止當(dāng)前事務(wù)
SET TRANSACTION 定義當(dāng)前事務(wù)數(shù)據(jù)訪問特征
(5)程序化SQL
DECLARE 為查詢設(shè)定游標(biāo)
EXPLAN 為查詢描述數(shù)據(jù)訪問計劃
OPEN 檢索查詢結(jié)果打開一個游標(biāo)
FETCH 檢索一行查詢結(jié)果
CLOSE 關(guān)閉游標(biāo)
PREPARE 為動態(tài)執(zhí)行準(zhǔn)備SQL 語句
EXECUTE 動態(tài)地執(zhí)行SQL 語句
DESCRIBE 描述準(zhǔn)備好的查詢
(6) 局部變量
declare @id char(10)
--set @id = ‘10010001‘
select @id = ‘10010001‘
(7)全局變量
---必須以@@開頭
(8) IF ELSE
--舉例:
declare @x int @y int @z int
select @x = 1 @y = 2 @z=3
if @x > @y
print ‘x > y‘ --打印字符串‘x > y‘
else if @y > @z
print ‘y > z‘
else print ‘z > y‘
(9) CASE
--舉例:
use pangu
update employee
set e_wage =
case
when job_level = ’1’ then e_wage*1.08
when job_level = ’2’ then e_wage*1.07
when job_level = ’3’ then e_wage*1.06
else e_wage*1.05
end
(10) WHILE CONTINUE BREAK
--舉例:
declare @x int @y int @c int
select @x = 1 @y=1
while @x < 3
begin
print @x --打印變量x 的值
while @y < 3
begin
select @c = 100*@x + @y
print @c --打印變量c 的值
select @y = @y + 1
end
select @x = @x + 1
select @y = 1
end
(11) WAITFOR
--舉例:
--例 等待1 小時2 分零3 秒后才執(zhí)行SELECT 語句
waitfor delay ’01:02:03’
select * from employee
--例 等到晚上11 點(diǎn)零8 分后才執(zhí)行SELECT 語句
waitfor time ’23:08:00’
select * from employee
2 常見用法舉例
(1) SELECT
select *(列名) from table_name(表名) where column_name operator value
ex:(宿主)
select * from stock_information where stockid = str(nid)
stockname = ‘str_name‘
stockname like ‘% find this %‘
stockname like ‘[a-zA-Z]%‘ --------- ([]指定值的范圍)
stockname like ‘[^F-M]%‘ --------- (^排除指定范圍)
--------- 只能在使用like關(guān)鍵字的where子句中使用通配符)
or stockpath = ‘stock_path‘
or stocknumber < 1000
and stockindex = 24
not stocksex = ‘man‘
stocknumber between 20 and 100
stocknumber in(10,20,30)
order by stockid desc(asc) --------- 排序,desc-降序,asc-升序
order by 1,2 --------- by列號
stockname = (select stockname from stock_information where stockid = 4)
--------- 子查詢
--------- 除非能確保內(nèi)層select只返回一個行的值,
--------- 否則應(yīng)在外層where子句中用一個in限定符
select distinct column_name form table_name --------- distinct指定檢索獨(dú)有的列值,不重復(fù)
select stocknumber ,"stocknumber + 10" = stocknumber + 10 from table_name
select stockname , "stocknumber" = count(*) from table_name group by stockname
--------- group by 將表按行分組,指定列中有相同的值
having count(*) = 2 --------- having選定指定的組
select *
from table1, table2
where table1.id *= table2.id -------- 左外部連接,table1中有的而table2中沒有得以null表示
table1.id =* table2.id -------- 右外部連接
select stockname from table1
union [all] ----- union合并查詢結(jié)果集,all-保留重復(fù)行
select stockname from table2
(2) insert
insert into table_name (Stock_name,Stock_number) value ("xxx","xxxx")
value (select Stockname , Stocknumber from Stock_table2)---value為select語句
(3) update
update table_name set Stockname = "xxx" [where Stockid = 3]
Stockname = default
Stockname = null
Stocknumber = Stockname + 4
(4) delete
delete from table_name where Stockid = 3
truncate table_name ----------- 刪除表中所有行,仍保持表的完整性
drop table table_name --------------- 完全刪除表
(5) alter table
alter table database.owner.table_name add column_name char(2) null ..
sp_help table_name ---- 顯示表已有特征
create table table_name (name char(20), age smallint, lname varchar(30))
insert into table_name select ----- 實(shí)現(xiàn)刪除列的方法(創(chuàng)建新表)
alter table table_name drop constraint Stockname_default ---- 刪除Stockname的default約束
四 MS-SQL數(shù)據(jù)庫開發(fā)常用匯總
1 按姓氏筆畫排序
Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as
2 數(shù)據(jù)庫加密
select encrypt(‘原始密碼‘)
select pwdencrypt(‘原始密碼‘)
select pwdcompare(‘原始密碼‘,‘加密后密碼‘) = 1--相同;否則不相同 encrypt(‘原始密碼‘)
select pwdencrypt(‘原始密碼‘)
select pwdcompare(‘原始密碼‘,‘加密后密碼‘) = 1--相同;否則不相同
3 取回表中字段
declare @list varchar(1000),@sql nvarchar(1000)
select @list=@list+‘,‘+b.name from sysobjects a,syscolumns b where a.id=b.id and a.name=‘表A‘
set @sql=‘select ‘+right(@list,len(@list)-1)+‘ from 表A‘
exec (@sql)
4 查看硬盤分區(qū)
EXEC master..xp_fixeddrives
5 比較A,B表是否相等
if (select checksum_agg(binary_checksum(*)) from A)
=
(select checksum_agg(binary_checksum(*)) from B)
print ‘相等‘
else
print ‘不相等‘
6 殺掉所有的事件探察器進(jìn)程
DECLARE hcforeach CURSOR GLOBAL FOR SELECT ‘kill ‘+RTRIM(spid)
FROM master.dbo.sysprocesses
WHERE program_name IN(‘SQL profiler‘,N‘SQL 事件探查器‘)
EXEC sp_msforeach_worker ‘?‘
7 記錄搜索
(1) 開頭到N條記錄
Select Top N * From 表
(2) N到M條記錄(要有主索引ID)
Select Top M-N * From 表 Where ID in (Select Top M ID From 表) Order by ID Desc
(3)N到結(jié)尾記錄
Select Top N * From 表 Order by ID Desc
8 如何修改數(shù)據(jù)庫的名稱
sp_renamedb ‘old_name‘, ‘new_name‘
9 獲取當(dāng)前數(shù)據(jù)庫中的所有用戶表
select Name from sysobjects where xtype=‘u‘ and status>=0
或者:
select * from information_schema.tables
10 獲取某一個表的所有字段
select name from syscolumns where id=object_id(‘表名‘)
11 查看與某一個表相關(guān)的視圖、存儲過程、函數(shù)
select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like ‘%表名%‘
12 查看當(dāng)前數(shù)據(jù)庫中所有存儲過程
select name as 存儲過程名稱 from sysobjects where xtype=‘P‘
13 查詢用戶創(chuàng)建的所有數(shù)據(jù)庫
select * from master..sysdatabases D
where sid not in(select sid from master..syslogins where name=‘sa‘)
或者
select dbid, name AS DB_NAME from master..sysdatabases where sid <> 0x01
14 查詢某一個表的字段和數(shù)據(jù)類型
select column_name,data_type from information_schema.columns
where table_name = ‘表名‘
15 判斷一個表是否存在
if exists(select 1 from sysobjects where name=‘要判斷的表名‘ and xtype=‘U‘)
print ‘在‘
else
print ‘不在‘
或者
if objectproperty(object_id(‘要判斷的表名‘),‘isusertable‘) is null
print ‘無此表‘
else
print ‘有此表‘
16 在存儲過程中刪除表的列
http://blog.csdn.net/scucj/archive/2006/07/14/919525.aspx
17 創(chuàng)建一個表和兩個字段,并指定其中一個字段為自增的關(guān)鍵字
CREATE TABLE ‘+ @TABLENAME + ‘ (tableID BigInt identity(1,1) primary key,myUserID BigInt)‘
本文參考: