本文的部分內容從網(wǎng)上查找得到的,并給出了原文地址。
一 常用函數(function)
1 數據類(lèi)型轉換函數
CAST ( expression AS data_type ) -- 將某種數據類(lèi)型的表達式顯式轉換為另一種數據類(lèi)型
CONVERT (data_type[(length)], expression [, style])-- 將某種數據類(lèi)型的表達式顯式轉換為另一種數據類(lèi)型
2 統計函數
AVG -- 返回組中值的平均值??罩祵⒈缓雎?。
COUNT--返回組中項目的數量。
MAX--返回表達式的最大值。
MIN--返回表達式的最小值。
SUM--返回表達式中所有值的和,或只返回 DISTINCT 值。SUM 只能用于數字列??罩祵⒈缓雎?。
STDEV()
--STDEV()函數返回表達式中所有數據的標準差
--STDEVP()
--STDEVP()函數返回總體標準差
VAR()
--VAR()函數返回表達式中所有值的統計變異數
VARP()
--VARP()函數返回總體變異數
3 數學(xué)函數
(1) 取近似值函數
SQRT( float_expression )--返回給定表達式的平方根。
CEILING( numeric_expression )--返回大于或等于所給數字表達式的最小整數。
FLOOR( numeric_expression )--返回小于或等于所給數字表達式的最大整數。
ROUND(numeric_expression , length)--返回數字表達式并四舍五入為指定的長(cháng)度或精度。
SIGN( numeric_expression )--返回給定表達式的正 (+1)、零 (0) 或負 (-1) 號。
ABS ( numeric_expression )--返回給定數字表達式的絕對值。
PI(), 返回 PI 的常量值。
RAND(), RAND( seed )返回 0 到1 之間的隨機float 值。
(2)三角函數
SIN(float_expression)--返回以弧度表示的角的正弦
COS(float_expression)--返回以弧度表示的角的余弦
TAN(float_expression)--返回以弧度表示的角的正切
COT(float_expression)--返回以弧度表示的角的余切
(3)反三角函數
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)--當給出以弧度為單位的角度時(shí),返回相應的以度數為單位的角度。
RADIANS(numeric_expression)------對于在數字表達式中輸入的度數值返回弧度值。
EXP(float_expression)--返回表達式的指數值
LOG(float_expression)--返回表達式的自然對數值
LOG10(float_expression)--返回表達式的以10為底的對數值
SQRT(float_expression)--返回表達式的平方根
4 字符串函數
ASCII ( character_expression )--返回字符表達式最左端字符的 ASCII 代碼值。
CHAR ( integer_expression )--將 int ASCII 代碼轉換為字符的字符串函數。
LOWER ( character_expression )--將大寫(xiě)字符數據轉換為小寫(xiě)字符數據后返回字符表達式。
UPPER ( character_expression )--返回將小寫(xiě)字符數據轉換為大寫(xiě)的字符表達式。
STR ( float_expression [ , length [ , decimal ] ] ) --由數字數據轉換來(lái)的字符數據。
LTRIM( character_expression )--刪除起始空格后返回字符表達式。
RTRIM ( character_expression )--截斷所有尾隨空格后返回一個(gè)字符串。
LEFT ( character_expression , integer_expression ) --返回從字符串左邊開(kāi)始指定個(gè)數的字符。
RIGHT ( character_expression , integer_expression ) --返回字符串中從右邊開(kāi)始指定個(gè)數的 integer_expression 字符。
SUBSTRING ( expression , start , length )--截取字符串
CHARINDEX ( expression1 , expression2 [ , start_location ] ) --返回字符串中指定表達式的起始位置,沒(méi)有返回0
PATINDEX ( ‘%pattern%‘ , expression ) -- 返回指定表達式中某模式第一次出現的起始位置;如果在全部有效的文本和字符數據類(lèi)型中沒(méi)有找到該模式,則返回零。
REPLICATE ( character_expression , integer_expression )-- 以指定的次數重復字符表達式。
REVERSE ( character_expression )-- 返回字符表達式的反轉。
REPLACE ( ‘string_expression1‘ , ‘string_expression2‘ , ‘string_expression3‘ )--用第三個(gè)表達式替換第一個(gè)字符串表達式中出現的所有第二個(gè)給定字符串表達式。
STUFF ( character_expression , start , length , character_expression )--刪除指定長(cháng)度的字符并在指定的起始點(diǎn)插入另一組字符。
SPACE ( integer_expression )-- 返回由重復的空格組成的字符串。
5 日期函數
DAY()--函數返回date_expression中的日期值
MONTH()--函數返回date_expression中的月份值
YEAR()--函數返回date_expression中的年份值
DATEADD( datepart , number, date )--函數返回指定日期date加上指定的額外日期間隔number產(chǎn)生的新日期
DATEDIFF( datepart , startdate , enddate )--函數返回兩個(gè)指定日期在datepart方面的不同之處
DATENAME(datepart , date )------函數以字符串的形式返回日期的指定部分
DATEPART( datepart , date )--函數以整數值的形式返回日期的指定部分
GETDATE()------函數以DATETIME的缺省格式返回系統當前的日期和時(shí)間
6 系統函數
APP_NAME()------函數返回當前執行的應用程序的名稱(chēng)
COALESCE()-----函數返回眾多表達式中第一個(gè)非NULL表達式的值
COL_LENGTH ( ‘table‘ , ‘column‘ ) ----函數返回表中指定字段的長(cháng)度值
COL_NAME ( table_id , column_id )----返回數據庫列的名稱(chēng),該列具有相應的表標識號和列標識號。
DATALENGTH()-----函數返回數據表達式的數據的實(shí)際長(cháng)度
DB_ID ( [ ‘database_name‘ ] ) ------函數返回數據庫的編號
DB_NAME(database_id)------函數返回數據庫的名稱(chēng)
HOST_ID()-----函數返回服務(wù)器端計算機的名稱(chēng)
HOST_NAME()-----函數返回服務(wù)器端計算機的名稱(chēng)
IDENTITY ( data_type [ , seed , increment ] ) AS column_name --IDENTITY()函數只在SELECTINTO語(yǔ)句中使用用于插入一個(gè)identitycolumn列到新表中
ISDATE()----函數判斷所給定的表達式是否為合理日期
ISNULL ( check_expression , replacement_value ) --函數將表達式中的NULL值用指定值替換
ISNUMERIC()----函數判斷所給定的表達式是否為合理的數值
NEWID()----函數返回一個(gè)UNIQUEIDENTIFIER類(lèi)型的數值
NULLIF ( expression , expression )--NULLIF函數在expression1與expression2相等時(shí)返回NULL值若不相等時(shí)則返回xpression1的值
[來(lái)源: http://stevieliu.blogchina.com/stevieliu/4720568.html]
[參考《SQL Server聯(lián)機叢書(shū)》,略有修改]
二 SQL Server中各個(gè)系統表的作用
sysaltfiles 主數據庫 保存數據庫的文件
syscharsets 主數據庫 字符集與排序順序
sysconfigures 主數據庫 配置選項
syscurconfigs 主數據庫 當前配置選項
sysdatabases 主數據庫 服務(wù)器中的數據庫
syslanguages 主數據庫 語(yǔ)言
syslogins 主數據庫 登陸賬號信息
sysoledbusers 主數據庫 鏈接服務(wù)器登陸信息
sysprocesses 主數據庫 進(jìn)程
sysremotelogins主數據庫 遠程登錄賬號
syscolumns 每個(gè)數據庫 列
sysconstrains 每個(gè)數據庫 限制
sysfilegroups 每個(gè)數據庫 文件組
sysfiles 每個(gè)數據庫 文件
sysforeignkeys 每個(gè)數據庫 外部關(guān)鍵字
sysindexs 每個(gè)數據庫 索引
sysmenbers 每個(gè)數據庫 角色成員
sysobjects 每個(gè)數據庫 所有數據庫對象
syspermissions 每個(gè)數據庫 權限
systypes 每個(gè)數據庫 用戶(hù)定義數據類(lèi)型
sysusers 每個(gè)數據庫 用戶(hù)
三 Transact_SQL
1 語(yǔ)法
語(yǔ) 句 功 能
(1) 數據操作
SELECT 從數據庫表中檢索數據行和列
INSERT 向數據庫表添加新數據行
DELETE 從數據庫表中刪除數據行
UPDATE 更新數據庫表中的數據
(2)數據定義
CREATE TABLE 創(chuàng )建一個(gè)數據庫表
DROP TABLE 從數據庫中刪除表
ALTER TABLE 修改數據庫表結構
CREATE VIEW 創(chuàng )建一個(gè)視圖
DROP VIEW 從數據庫中刪除視圖
CREATE INDEX 為數據庫表創(chuàng )建一個(gè)索引
DROP INDEX 從數據庫中刪除索引
CREATE PROCEDURE 創(chuàng )建一個(gè)存儲過(guò)程
DROP PROCEDURE 從數據庫中刪除存儲過(guò)程
CREATE TRIGGER 創(chuàng )建一個(gè)觸發(fā)器
DROP TRIGGER 從數據庫中刪除觸發(fā)器
CREATE SCHEMA 向數據庫添加一個(gè)新模式
DROP SCHEMA 從數據庫中刪除一個(gè)模式
CREATE DOMAIN 創(chuàng )建一個(gè)數據值域
ALTER DOMAIN 改變域定義
DROP DOMAIN 從數據庫中刪除一個(gè)域
(3)數據控制
GRANT 授予用戶(hù)訪(fǎng)問(wèn)權限
DENY 拒絕用戶(hù)訪(fǎng)問(wèn)
REVOKE 解除用戶(hù)訪(fǎng)問(wèn)權限
(4)事務(wù)控制
COMMIT 結束當前事務(wù)
ROLLBACK 中止當前事務(wù)
SET TRANSACTION 定義當前事務(wù)數據訪(fǎng)問(wèn)特征
(5)程序化SQL
DECLARE 為查詢(xún)設定游標
EXPLAN 為查詢(xún)描述數據訪(fǎng)問(wèn)計劃
OPEN 檢索查詢(xún)結果打開(kāi)一個(gè)游標
FETCH 檢索一行查詢(xún)結果
CLOSE 關(guān)閉游標
PREPARE 為動(dòng)態(tài)執行準備SQL 語(yǔ)句
EXECUTE 動(dòng)態(tài)地執行SQL 語(yǔ)句
DESCRIBE 描述準備好的查詢(xún)
(6) 局部變量
declare @id char(10)
--set @id = ‘10010001‘
select @id = ‘10010001‘
(7)全局變量
---必須以@@開(kāi)頭
(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 小時(shí)2 分零3 秒后才執行SELECT 語(yǔ)句
waitfor delay ’01:02:03’
select * from employee
--例 等到晚上11 點(diǎn)零8 分后才執行SELECT 語(yǔ)句
waitfor time ’23:08:00’
select * from employee
2 常見(jiàn)用法舉例
(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)
--------- 子查詢(xún)
--------- 除非能確保內層select只返回一個(gè)行的值,
--------- 否則應在外層where子句中用一個(gè)in限定符
select distinct column_name form table_name --------- distinct指定檢索獨有的列值,不重復
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中沒(méi)有得以null表示
table1.id =* table2.id -------- 右外部連接
select stockname from table1
union [all] ----- union合并查詢(xún)結果集,all-保留重復行
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語(yǔ)句
(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í)現刪除列的方法(創(chuàng )建新表)
alter table table_name drop constraint Stockname_default ---- 刪除Stockname的default約束
四 MS-SQL數據庫開(kāi)發(fā)常用匯總
1 按姓氏筆畫(huà)排序
Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as
2 數據庫加密
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 查看硬盤(pán)分區
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) 開(kāi)頭到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到結尾記錄
Select Top N * From 表 Order by ID Desc
8 如何修改數據庫的名稱(chēng)
sp_renamedb ‘old_name‘, ‘new_name‘
9 獲取當前數據庫中的所有用戶(hù)表
select Name from sysobjects where xtype=‘u‘ and status>=0
或者:
select * from information_schema.tables
10 獲取某一個(gè)表的所有字段
select name from syscolumns where id=object_id(‘表名‘)
11 查看與某一個(gè)表相關(guān)的視圖、存儲過(guò)程、函數
select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like ‘%表名%‘
12 查看當前數據庫中所有存儲過(guò)程
select name as 存儲過(guò)程名稱(chēng) from sysobjects where xtype=‘P‘
13 查詢(xún)用戶(hù)創(chuàng )建的所有數據庫
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 查詢(xún)某一個(gè)表的字段和數據類(lèi)型
select column_name,data_type from information_schema.columns
where table_name = ‘表名‘
15 判斷一個(gè)表是否存在
if exists(select 1 from sysobjects where name=‘要判斷的表名‘ and xtype=‘U‘)
print ‘在‘
else
print ‘不在‘
或者
if objectproperty(object_id(‘要判斷的表名‘),‘isusertable‘) is null
print ‘無(wú)此表‘
else
print ‘有此表‘
16 在存儲過(guò)程中刪除表的列
http://blog.csdn.net/scucj/archive/2006/07/14/919525.aspx
17 創(chuàng )建一個(gè)表和兩個(gè)字段,并指定其中一個(gè)字段為自增的關(guān)鍵字
CREATE TABLE ‘+ @TABLENAME + ‘ (tableID BigInt identity(1,1) primary key,myUserID BigInt)‘
本文參考: