『壹』 sql Server 2000 或 2005 關鍵字及函數手冊
打開 查詢分析器,按F1,然後查找你要的,都是中文的幫助,很容易看懂的。
關鍵字很簡單。我就不贅述了
,說一下函數吧
17、常用函數
----統計函數----
AVG --求平均值
COUNT --統計數目
MAX --求最大值
MIN --求最小值
SUM --求和
--AVG
use pangu
select avg(e_wage) as dept_avgWage
from employee
group by dept_id
--MAX
--求工資最高的員工姓名
use pangu
select e_name
from employee
where e_wage =
(select max(e_wage)
from employee)
--STDEV()
--STDEV()函數返回表達式中所有數據的標准差
--STDEVP()
--STDEVP()函數返回總體標准差
--VAR()
--VAR()函數返回表達式中所有值的統計變異數
--VARP()
--VARP()函數返回總體變異數
----算術函數----
/***三角函數***/
SIN(float_expression) --返回以弧度表示的角的正弦
COS(float_expression) --返回以弧度表示的角的餘弦
TAN(float_expression) --返回以弧度表示的角的正切
COT(float_expression) --返回以弧度表示的角的餘切
/***反三角函數***/
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)
--把弧度轉換為角度返回與表達式相同的數據類型可為
--INTEGER/MONEY/REAL/FLOAT 類型
RADIANS(numeric_expression) --把角度轉換為弧度返回與表達式相同的數據類型可為
--INTEGER/MONEY/REAL/FLOAT 類型
EXP(float_expression) --返回表達式的指數值
LOG(float_expression) --返回表達式的自然對數值
LOG10(float_expression)--返回表達式的以10 為底的對數值
SQRT(float_expression) --返回表達式的平方根
/***取近似值函數***/
CEILING(numeric_expression) --返回>=表達式的最小整數返回的數據類型與表達式相同可為
--INTEGER/MONEY/REAL/FLOAT 類型
FLOOR(numeric_expression) --返回<=表達式的最小整數返回的數據類型與表達式相同可為
--INTEGER/MONEY/REAL/FLOAT 類型
ROUND(numeric_expression) --返回以integer_expression 為精度的四捨五入值返回的數據
--類型與表達式相同可為INTEGER/MONEY/REAL/FLOAT 類型
ABS(numeric_expression) --返回表達式的絕對值返回的數據類型與表達式相同可為
--INTEGER/MONEY/REAL/FLOAT 類型
SIGN(numeric_expression) --測試參數的正負號返回0 零值1 正數或-1 負數返回的數據類型
--與表達式相同可為INTEGER/MONEY/REAL/FLOAT 類型
PI() --返回值為π 即3.1415926535897936
RAND([integer_expression]) --用任選的[integer_expression]做種子值得出0-1 間的隨機浮點數
18、字元串函數
ASCII() --函數返回字元表達式最左端字元的ASCII 碼值
CHAR() --函數用於將ASCII 碼轉換為字元
--如果沒有輸入0 ~ 255 之間的ASCII 碼值CHAR 函數會返回一個NULL 值
LOWER() --函數把字元串全部轉換為小寫
UPPER() --函數把字元串全部轉換為大寫
STR() --函數把數值型數據轉換為字元型數據
LTRIM() --函數把字元串頭部的空格去掉
RTRIM() --函數把字元串尾部的空格去掉
LEFT(),RIGHT(),SUBSTRING() --函數返回部分字元串
CHARINDEX(),PATINDEX() --函數返回字元串中某個指定的子串出現的開始位置
SOUNDEX() --函數返回一個四位字元碼
--SOUNDEX函數可用來查找聲音相似的字元串但SOUNDEX函數對數字和漢字均只返回0 值
DIFFERENCE() --函數返回由SOUNDEX 函數返回的兩個字元表達式的值的差異
--0 兩個SOUNDEX 函數返回值的第一個字元不同
--1 兩個SOUNDEX 函數返回值的第一個字元相同
--2 兩個SOUNDEX 函數返回值的第一二個字元相同
--3 兩個SOUNDEX 函數返回值的第一二三個字元相同
--4 兩個SOUNDEX 函數返回值完全相同
QUOTENAME() --函數返回被特定字元括起來的字元串
/*select quotename('abc', '{') quotename('abc')
運行結果如下
----------------------------------{
{abc} [abc]*/
REPLICATE() --函數返回一個重復character_expression 指定次數的字元串
/*select replicate('abc', 3) replicate( 'abc', -2)
運行結果如下
----------- -----------
abcabcabc NULL*/
REVERSE() --函數將指定的字元串的字元排列順序顛倒
REPLACE() --函數返回被替換了指定子串的字元串
/*select replace('abc123g', '123', 'def')
運行結果如下
----------- -----------
abcdefg*/
SPACE() --函數返回一個有指定長度的空白字元串
STUFF() --函數用另一子串替換字元串指定位置長度的子串
19、數據類型轉換函數----
CAST() 函數語法如下
CAST() (<expression> AS <data_ type>[ length ])
CONVERT() 函數語法如下
CONVERT() (<data_ type>[ length ], <expression> [, style])
select cast(100+99 as char) convert(varchar(12), getdate())
運行結果如下
------------------------------ ------------
199 Jan 15 2000
20、日期函數----
DAY() --函數返回date_expression 中的日期值
MONTH() --函數返回date_expression 中的月份值
YEAR() --函數返回date_expression 中的年份值
DATEADD(<datepart> ,<number> ,<date>)
--函數返回指定日期date 加上指定的額外日期間隔number 產生的新日期
DATEDIFF(<datepart> ,<number> ,<date>)
--函數返回兩個指定日期在datepart 方面的不同之處
DATENAME(<datepart> , <date>) --函數以字元串的形式返回日期的指定部分
DATEPART(<datepart> , <date>) --函數以整數值的形式返回日期的指定部分
GETDATE() --函數以DATETIME 的預設格式返回系統當前的日期和時間
21、系統函數----
APP_NAME() --函數返回當前執行的應用程序的名稱
COALESCE() --函數返回眾多表達式中第一個非NULL 表達式的值
COL_LENGTH(<'table_name'>, <'column_name'>) --函數返回表中指定欄位的長度值
COL_NAME(<table_id>, <column_id>) --函數返回表中指定欄位的名稱即列名
DATALENGTH() --函數返回數據表達式的數據的實際長度
DB_ID(['database_name']) --函數返回資料庫的編號
DB_NAME(database_id) --函數返回資料庫的名稱
HOST_ID() --函數返回伺服器端計算機的名稱
HOST_NAME() --函數返回伺服器端計算機的名稱
IDENTITY(<data_type>[, seed increment]) [AS column_name])
--IDENTITY() 函數只在SELECT INTO 語句中使用用於插入一個identity column列到新表中
/*select identity(int, 1, 1) as column_name
into newtable
from oldtable*/
ISDATE() --函數判斷所給定的表達式是否為合理日期
ISNULL(<check_expression>, <replacement_value>) --函數將表達式中的NULL 值用指定值替換
ISNUMERIC() --函數判斷所給定的表達式是否為合理的數值
NEWID() --函數返回一個UNIQUEIDENTIFIER 類型的數值
NULLIF(<expression1>, <expression2>)
--NULLIF 函數在expression1 與expression2 相等時返回NULL 值若不相等時則返回expression1 的值
22、數學函數
1.絕對值
S:select abs(-1) value
O:select abs(-1) value from al
2.取整(大)
S:select ceiling(-1.001) value
O:select ceil(-1.001) value from al
3.取整(小)
S:select floor(-1.001) value
O:select floor(-1.001) value from al
4.取整(截取)
S:select cast(-1.002 as int) value
O:select trunc(-1.002) value from al
5.四捨五入
S:select round(1.23456,4) value 1.23460
O:select round(1.23456,4) value from al 1.2346
6.e為底的冪
S:select Exp(1) value 2.7182818284590451
O:select Exp(1) value from al 2.71828182
7.取e為底的對數
S:select log(2.7182818284590451) value 1
O:select ln(2.7182818284590451) value from al; 1
8.取10為底對數
S:select log10(10) value 1
O:select log(10,10) value from al; 1
9.取平方
S:select SQUARE(4) value 16
O:select power(4,2) value from al 16
10.取平方根
S:select SQRT(4) value 2
O:select SQRT(4) value from al 2
11.求任意數為底的冪
S:select power(3,4) value 81
O:select power(3,4) value from al 81
12.取隨機數
S:select rand() value
O:select sys.dbms_random.value(0,1) value from al;
13.取符號
S:select sign(-8) value -1
O:select sign(-8) value from al -1
----------數學函數
14.圓周率
S:SELECT PI() value 3.1415926535897931
O:不知道
15.sin,cos,tan 參數都以弧度為單位
例如:select sin(PI()/2) value 得到1(SQLServer)
16.Asin,Acos,Atan,Atan2 返回弧度
17.弧度角度互換(SQLServer,Oracle不知道)
DEGREES:弧度-〉角度
RADIANS:角度-〉弧度
---------數值間比較
18. 求集合最大值
S:select max(value) value from
(select 1 value
union
select -2 value
union
select 4 value
union
select 3 value)a
O:select greatest(1,-2,4,3) value from al
19. 求集合最小值
S:select min(value) value from
(select 1 value
union
select -2 value
union
select 4 value
union
select 3 value)a
O:select least(1,-2,4,3) value from al
20.如何處理null值(F2中的null以10代替)
S:select F1,IsNull(F2,10) value from Tbl
O:select F1,nvl(F2,10) value from Tbl
--------數值間比較
21.求字元序號
S:select ascii('a') value
O:select ascii('a') value from al
22.從序號求字元
S:select char(97) value
O:select chr(97) value from al
23.連接
S:select '11'+'22'+'33' value
O:select CONCAT('11','22')||33 value from al
23.子串位置 --返回3
S:select CHARINDEX('s','sdsq',2) value
O:select INSTR('sdsq','s',2) value from al
23.模糊子串的位置 --返回2,參數去掉中間%則返回7
S:select patindex('%d%q%','sdsfasdqe') value
O:oracle沒發現,但是instr可以通過第四霾問�刂瞥魷執問?BR> select INSTR('sdsfasdqe','sd',1,2) value from al 返回6
24.求子串
S:select substring('abcd',2,2) value
O:select substr('abcd',2,2) value from al
25.子串代替 返回aijklmnef
S:SELECT STUFF('abcdef', 2, 3, 'ijklmn') value
O:SELECT Replace('abcdef', 'bcd', 'ijklmn') value from al
26.子串全部替換
S:沒發現
O:select Translate('fasdbfasegas','fa','我' ) value from al
27.長度
S:len,datalength
O:length
28.大小寫轉換 lower,upper
29.單詞首字母大寫
S:沒發現
O:select INITCAP('abcd dsaf df') value from al
30.左補空格(LPAD的第一個參數為空格則同space函數)
S:select space(10)+'abcd' value
O:select LPAD('abcd',14) value from al
31.右補空格(RPAD的第一個參數為空格則同space函數)
S:select 'abcd'+space(10) value
O:select RPAD('abcd',14) value from al
32.刪除空格
S:ltrim,rtrim
O:ltrim,rtrim,trim
33. 重復字元串
S:select REPLICATE('abcd',2) value
O:沒發現
34.發音相似性比較(這兩個單詞返回值一樣,發音相同)
S:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe')
O:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe') from al
SQLServer中用SELECT DIFFERENCE('Smithers', 'Smythers') 比較soundex的差
返回0-4,4為同音,1最高
23、日期函數
35.系統時間
S:select getdate() value
O:select sysdate value from al
36.前後幾日
直接與整數相加減
37.求日期
S:select convert(char(10),getdate(),20) value
O:select trunc(sysdate) value from al
select to_char(sysdate,'yyyy-mm-dd') value from al
38.求時間
S:select convert(char(8),getdate(),108) value
O:select to_char(sysdate,'hh24:mm:ss') value from al
39.取日期時間的其他部分
S:DATEPART 和 DATENAME 函數 (第一個參數決定)
O:to_char函數 第二個參數決定
參數---------------------------------下表需要補充
year yy, yyyy
quarter qq, q (季度)
month mm, m (m O無效)
dayofyear dy, y (O表星期)
day dd, d (d O無效)
week wk, ww (wk O無效)
weekday dw (O不清楚)
Hour hh,hh12,hh24 (hh12,hh24 S無效)
minute mi, n (n O無效)
second ss, s (s O無效)
millisecond ms (O無效)
----------------------------------------------
40.當月最後一天
S:不知道
O:select LAST_DAY(sysdate) value from al
41.本星期的某一天(比如星期日)
S:不知道
O:SELECT Next_day(sysdate,7) vaule FROM DUAL;
42.字元串轉時間
S:可以直接轉或者select cast('2004-09-08'as datetime) value
O:SELECT To_date('2004-01-05 22:09:38','yyyy-mm-dd hh24-mi-ss') vaule FROM DUAL;
43.求兩日期某一部分的差(比如秒)
S:select datediff(ss,getdate(),getdate()+12.3) value
O:直接用兩個日期相減(比如d1-d2=12.3)
SELECT (d1-d2)*24*60*60 vaule FROM DUAL;
44.根據差值求新的日期(比如分鍾)
S:select dateadd(mi,8,getdate()) value
O:SELECT sysdate+8/60/24 vaule FROM DUAL;
45.求不同時區時間
S:不知道
O:SELECT New_time(sysdate,'ydt','gmt' ) vaule FROM DUAL;
-----時區參數,北京在東8區應該是Ydt-------
AST ADT 大西洋標准時間
BST BDT 白令海標准時間
CST CDT 中部標准時間
EST EDT 東部標准時間
GMT 格林尼治標准時間
HST HDT 阿拉斯加—夏威夷標准時間
MST MDT 山區標准時間
NST 紐芬蘭標准時間
PST PDT 太平洋標准時間
YST YDT YUKON標准時間
『貳』 SQLSERVER,一條SQL語句返回查詢結果集和全表記錄數
你可以只用這一條SQL
select * from Table
然後用mysql_num_rows() 獲取記錄數
『叄』 sql 行變成列
declare@snvarchar(4000)
select@s=isnull(@s+',','')+quotename(Name)
fromsyscolumnswhereID=object_id('aa')
orderbyColid
exec('selectid,namefromaaunpivot(nameforidin('+@s+'))b')
如圖:
『肆』 如何定時刪除SQL資料庫
USE master
go
DECLARE @s NVARCHAR(4000)
SET @s=''
SELECT @s=@s+' '+'DROP DATABASE '+QUOTENAME(name) FROM master..sysdatabases WHERE dbID>4
EXEC( @s)
go
作業的操作
企業管理器
--管理
--SQL Server代理
--右鍵作業
--新建作業
--"常規"項中輸入作業名稱
--"步驟"項
--新建
--"步驟名"中輸入步驟名
--"類型"中選擇"Transact-SQL 腳本(TSQL)"
--"資料庫"選擇執行命令的資料庫
--"命令"中輸入要執行的語句:
上面提供的腳本
--確定
--"調度"項
--新建調度
--"名稱"中輸入調度名稱
--"調度類型"中選擇你的作業執行安排
--如果選擇"反復出現"
--點"更改"來設置你的時間安排
然後將SQL Agent服務啟動,並設置為自動啟動,否則你的作業不會被執行
設置方法:
我的電腦--控制面板--管理工具--服務--右鍵 SQLSERVERAGENT--屬性--啟動類型--選擇"自動啟動"--確定.
『伍』 SQL中如何截取標識符前、標識符中間、標識符後的欄位
幾個概念:
A、標識符:是資料庫對象的名稱。
資料庫對象的名稱被看成是該對象的標識符。Microsoft® SQL Server™ 中的每一內容都可帶有標識符。伺服器、資料庫和資料庫對象(例如表、視圖、列、索引、觸發器、過程、約束、規則等)都有標識符。大多數對象要求帶有標識符,但對有些對象(如約束)標識符是可選項。
B、保留關鍵字:是sql語言的語法。屬於代碼的范疇。
保留關鍵字是用來定義、操作和訪問資料庫。保留關鍵字是 SQL Server 使用的 Transact-SQL 語言語法的一部分,用於分析和理解 Transact-SQL 語句和批處理。盡管在 Transact-SQL 腳本中,使用 SQL Server 保留關鍵字作為標識符和對象名在語法上是可行的,但規定只能使用分隔標識符。
C、字元串:數據類型的一種,數據類型有整數型、字元串型等。屬於數據的范疇。
每個列、局部變數、表達式和參數都有一個相關的數據類型。即屬於某種數據類型。
D、通配符、轉義符:這2個是跟字元串相關的概念。一般出現在字元串中。
比如 like 』dsd%『 , dsd% 是字元串。%是通配符。這個語句的含義大家應該都知道,^_^。
使用轉義符,可以把通配符改變成普通字元。2種方法:
1、[]是默認的轉義符,裡面的通配符(裡面只能是通配符),都當做普通字元處理:
like 』dsd[%]『,這時,%就是個普通字元了,查找條件就是要某個欄位值完全等於 dsd% 。
2、用ESCAPE關鍵字定義轉義符,
like 』dsd/%『 ESCAPE 』/' 效果同 like 』dsd[%]『
還有一種轉義符情況:
大家知道,單引號一般可用來包含字元串,如果字元串中有單引號是普通字元,那麼就同時有了2種意思的單引號,怎麼區分呢?就要用2個單引號來轉義為普通字元,如 like 『ds''d』 ,其實就是指字元串:ds'd
後面提到的QUOTENAME函數,默認是用[]來做分隔符,如果字元串中有[],函數轉換後,字元串中的[]就要用兩個]]來轉義,表明這個[]是個普通字元,與字元串前後的分隔符 [] 相區別。
步入正題,
標識符,分為:
一、常規標識符:符合常規標識符規則的標識符。
常規標識符規則如下:(參考sqlserver的聯機幫助)
1、。。。。。
2、。。。。。
3、。。。。。
4、。。。。。
二、分隔標識符:包含在雙引號 " 或者方括弧 [ ] 內的標識符就是分隔標識符。
注意:雙引號 " 或者方括弧 [ ] 是分隔符。
在 Transact-SQL 語句中,對不符合常規標識符規則的標識符必須用雙引號或方括弧來分隔。符合標識符格式規則的標識符可以分隔,也可以不分隔。
1、當QUOTED_IDENTIFIER 為 ON 時,默認是on的。 SQL Server 遵循 SQL-92 規則:
雙引號只能用於分隔標識符,不能用於分隔字元串。
為保持與現有應用程序的兼容性,SQL Server 並不完全強制該規則。如果字元串沒有超過標識符的長度,則該字元串可包含在雙引號內。但不建議這樣做。
單引號必須用來包含字元串,不能用於分隔標識符。
如果字元串包含單引號,則需要在單引號前再增加一個單引號:
SELECT * FROM "My Table"
WHERE "Last Name" = 'O''Brien'
注意:"Last Name",你可以寫成'Last Name'而不會報語法錯誤,是因為,sql認為是進行字元串的比較了,比如寫成'Last Name'='Last Name',比較結果為真,表中的全部記錄就被select出來了。而如果寫成:WHERE "Last Name" = "O''Brien",即等號右邊改成雙引號,則會把O''Brien當成一個標識符(資料庫對象),即當成一個欄位名,運行時,會提示沒有O''Brien列。 2、當 QUOTED_IDENTIFIER 為 OFF 時,對於雙引號和單引號的使用,SQL Server 遵循如下規則:
引號不能用於分隔標識符,而是用括弧作為分隔符。
單引號或雙引號可用於包含字元串。
如果使用雙引號,嵌入的單引號不需要用兩個單引號來表示:
SELECT * FROM [My Table]
WHERE [Last Name] = "O'Brien"
常規標識符和分隔標識符包含的字元數必須在 1 到 128 之間
另外:
將標識符用作參數:(具體請參考聯機幫助)
許多系統存儲過程、函數和 DBCC 語句都把對象名當作參數。其中一些參數接受多部分對象名,另一些則只接受單部分名稱。接受單部分對象名稱還是多部分對象名稱決定了 SQL Server 在內部如何分析和使用參數。 。。。。。。。
另外:
QUOTENAME函數:
msdn解釋:返回帶有分隔符的 Unicode 字元串,分隔符的加入可使輸入的字元串成為有效的 Microsoft® SQL Server™ 分隔標識符。
以下示例接受字元串 abc[]def 並使用 [ 和 ] 字元來創建有效的 SQL Server 分隔標識符:
SELECT QUOTENAME('abc[]def')
下面是結果集:
[abc[]]def]
(1 row(s) affected)
注意,字元串"abc[]def"中的右括弧有兩個,用於表示轉義符,轉換成普通字元,與分隔符 [] 相區別。
解釋:字元串 abc[]def 中的[]是當做普通字元,所以用 ] ] 來表示 ] 是個普通字元,即表明中間的 [] 就是個普通字元。
如果是:SELECT QUOTENAME('abc[]def' , '()' ) ,不用[]來做分隔符,那麼結果是:
(abc[]def) ,就不用兩個]] 來轉義了,因為新的字元串中只有一種意思的[],即普通字元。
這是個通用的規則,比如字元串中含有單引號 ' 為普通字元串時,比如 :ds'd ,
like 語句就要改成:like 『ds『』d』,而不是: like 'ds'd' 。即2個單引號表示轉義符,轉換成普通單引號字元 ' 。
『陸』 sql查詢資料庫中有某個值的所有表
1、首先在電腦中打開Microsoft SQL Server,查詢所有資料庫。