版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、SQLServer 和 Oracle 的常用函數(shù)對(duì)比 1. 絕對(duì)值 S:select abs(-1) value O:select abs(-1) value from dual 2. 取整(大) S:select ceiling(-1.001) value O:select ceil(-1.001) value from dual 3. 取整(小) S:select floor(-1.001) value O:select floor(-1.001) value from dual 4. 取整(截取) S:select cast(-1.002 as int) value O:select t
2、runc(-1.002) value from dual 5. 四舍五入 S:select round(1.23456,4) value 1.23460 O:select round(1.23456,4) value from dual 1.2346 6. e為底的冪 S:select Exp(1) value 2.7182818284590451 O:select Exp(1) value from dual 2.71828182 7. 取 e 為底的對(duì)數(shù) S:select log(2.7182818284590451) value 1 O:select ln(2.7182818284590
3、451) value from dual; 1 8. 取 10 為底對(duì)數(shù) S:select log10(10) value 1 O:select log(10,10) value from dual; 1 9. 取平方 S:select SQUARE(4) value 16 O:select power(4,2) value from dual 16 10. 取平方根 S:select SQRT(4) value 2 O:select SQRT(4) value from dual 2 11. 求任意數(shù)為底的冪 S:select power(3,4) value 81 O:select pow
4、er(3,4) value from dual 81 12. 取隨機(jī)數(shù) S:select rand() value O:select sys.dbms_random.value(0,1) value from dual; 13. 取符號(hào) S:select sign(-8) value -1 O:select sign(-8) value from dual -1 數(shù)學(xué)函數(shù) 14. 圓周率 S:Select PI() value 3.1415926535897931 O:不知道 15. sin,cos,tan 參數(shù)都以弧度為單位 例如: select sin(PI()/2) value 得到 1
5、(SQLServer) 16. Asin,Acos,Atan,Atan2 返回弧度 17. 弧度角度互換 (SQLServer,Oracle 不知道 ) DEGREES :弧度-角度 RADIANS :角度 -弧度 數(shù)值間比較 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 dual 19. 求集合最小值 S:selec
6、t 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 dual 20. 如何處理null值(F2中的null以10代替) S:select F1,IsNull(F2,10) value from Tbl O:select F1,nvl(F2,10) value from Tbl 數(shù)值間比較 21. 求字符序號(hào) S:select ascii(a) value O:sel
7、ect ascii(a) value from dual 22. 從序號(hào)求字符 S:select char(97) value O:select chr(97) value from dual 23. 連接 S:select 11+22+33 value O:select CONCAT(11,22)|33 value from dual 23子串位置-返回3 S:select CHARINDEX(s,sdsq,2) value O:select INSTR(sdsq,s,2) value from dual 23模糊子串的位置-返回2,參數(shù)去掉中間%則 返回7 S:select pati nd
8、ex(%d%q%,sdsfasdqe) value O:oracle沒發(fā)現(xiàn),但是in str可以通過第四霾問 證 刂瞥魷執(zhí)問?BRselect INSTR(sdsfasdqe,sd,1,2) value from dual 返回 6 24. 求子串 S:select substri ng(abcd,2,2) value O:select substr(abcd,2,2) value from dual 25子串代替返回aijklmnef S:Select STUFF(abcdef, 2, 3, ijklmn) value O:Select Replace(abcdef, bed, ijkl m
9、n) value from dual 26. 子串全部替換 S:沒發(fā)現(xiàn) O:select Translate(fasdbfasegas,fa我)value from dual 27. 長(zhǎng)度 S:len,datalength O:length 28. 大小寫轉(zhuǎn)換 lower,upper 29. 單詞首字母大寫 s:沒發(fā)現(xiàn) O:select INITCAP(abcd dsaf df) value from dual 30. 左補(bǔ)空格( LPAD 的第一個(gè)參數(shù)為空格則同 space函 數(shù)) S:select space(10)+abcd value O:select LPAD(abcd,14) va
10、lue from dual 31. 右補(bǔ)空格( RPAD 的第一個(gè)參數(shù)為空格則同 space函 數(shù)) S:select abcd+space(10) value O:select RPAD(abcd,14) value from dual 32. 刪除空格 S:ltrim,rtrim O:ltrim,rtrim,trim 33. 重復(fù)字符串 S:select REPLICATE(abcd,2) value O:沒發(fā)現(xiàn) 34. 發(fā)音相似性比較 (這兩個(gè)單詞返回值一樣,發(fā) 音相同 ) S:Select SOUNDEX (Smith), SOUNDEX (Smythe) O:Select SOUND
11、EX (Smith), SOUNDEX (Smythe) from dual SQLServer 中用 Select DIFFERENCE(Smithers, Smythers) 比較 soundex 的差 返回 0-4,4 為同音, 1 最高 dual dual 日期函數(shù) 35.系統(tǒng)時(shí)間 S:select getdate() value O:select sysdate value from dual 36.前后幾日 直接與整數(shù)相加減 37.求日期 S:select convert(char(10),getdate(),20) value O:select trunc(sysdate) va
12、lue from dual select to_char(sysdate,yyyy-mm-dd) value from 38.求時(shí)間 S:select convert(char(8),getdate(),108) value O:select to_char(sysdate,hh24:mm:ss)value from 39.取日期時(shí)間的其他部分 S:DATEPART 和 DATENAME 函數(shù) (第一個(gè)參 數(shù)決定) O:to_char 函數(shù) 第二個(gè)參數(shù)決定 參數(shù) 下表需要補(bǔ)充 year yy, yyyy quarter qq, q (季度 ) month mm, m (m O 無效 ) day
13、ofyear 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 無效) sec ond ss, s (s O無效) millisecond ms (O 無效) 40. 當(dāng)月最后一天 S:不知道 O:select LAST_DAY(sysdate) value from dual 41. 本星期的某一天(比如星期日) S:不知道 O:Select Next_day(sysdate,7) vaul
14、e FROM DUAL; 42. 字符串轉(zhuǎn)時(shí)間 S: 可 以 直 接 轉(zhuǎn) 或 者 select cast(2004-09-08as 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:直接用兩個(gè)日期相減(比如 d1-d2=12.3) Select (d1-d2)*24*60*60 vaule FROM DUAL;
15、44. 根據(jù)差值求新的日期(比如分鐘) S:select dateadd(mi,8,getdate() value O:Select sysdate+8/60/24 vaule FROM DUAL; 45. 求不同時(shí)區(qū)時(shí)間 S:不知道 O:Select New_time(sysdate,ydt,gmt ) vaule FROM DUAL; 時(shí)區(qū)參數(shù) ,北京在東 8 區(qū)應(yīng)該是 Ydt AST ADT 大西洋標(biāo)準(zhǔn)時(shí)間 BST BDT 白令海標(biāo)準(zhǔn)時(shí)間 CST CDT 中部標(biāo)準(zhǔn)時(shí)間 EST EDT 東部標(biāo)準(zhǔn)時(shí)間 GMT 格林尼治標(biāo)準(zhǔn)時(shí)間 HST HDT 阿拉斯加夏威夷標(biāo)準(zhǔn)時(shí)間 MST MDT 山區(qū)標(biāo)準(zhǔn)
16、時(shí)間 NST 紐芬蘭標(biāo)準(zhǔn)時(shí)間 PST PDT 太平洋標(biāo)準(zhǔn)時(shí)間 YST YDT YUKON 標(biāo)準(zhǔn)時(shí)間 配置 SQL Server 數(shù)據(jù)庫(kù) EXEC sp_dboption pubs, read only, True 此選項(xiàng)把數(shù)據(jù)庫(kù) “ pubs” 設(shè)置為只讀。 EXEC sp_dboption pubs autoshrink true 此選項(xiàng)把符合條件的 “pubs” 數(shù)據(jù)庫(kù)文件設(shè)置為自動(dòng) 周期性收縮。 EXEC sp_dboption pubs single user 此命令每次只允許一個(gè)用戶訪問數(shù)據(jù)庫(kù)。 DBCC SHRINKDATABASE(PUBS, 10) 會(huì)減小“ pubs”數(shù)據(jù)庫(kù)中
17、文件的大小,并允許有10% 的可用空間。 使用 T-SQL 創(chuàng)建表 create table MyTable (stdID int, stdName varchar(50) ) 自定義數(shù)據(jù)類型 EXEC sp_addtype City, nvarchar(15), NULL EXEC sp_addtype PostCode, nvarchar(6), NULL EXEC sp_addtype NCode, nvarchar(18), NULL 刪除自定義數(shù)據(jù)類型 EXEC sp_droptype city 使用 T-SQL 創(chuàng)建表 CREATE TABLE Categories (Catego
18、ryID int IDENTITY(1,1), NOT CategoryName nvarchar(15) NULL, Description ntext NULL, Picture image NULL) 實(shí)體完整性實(shí)現(xiàn) l 主鍵約束 CREATE TABLE jobs( Job_id smallint PRIMARY KEY, job_desc varchar(50) NOT NULL) l 唯一約束 CREATE TABLE jobs( Job_id smallint UNIQUE) 標(biāo)識(shí)列 CREATE TABLE jobs( Job_id smallint IDENTIRY (2,1
19、) PRIMARY KEY) l Uniqueidentifier 數(shù)據(jù)類型和 NEWID 函數(shù) CREATE TABLE Customer (CustID uniqueidentifier NOT NULL DEFAULT NEWID(), CustName char(30) NOT NULL) INSERT Customer VALUES (NEWID(),ASB) l 引用完整性實(shí)現(xiàn) ALTER TABLE dbo.Orders ADD CONSTRAINT FK_Orders_Customers FOREIGN KEY (CustomerID) REFERENCES dbo.Custo
20、mers(CustomerID) l 更新表結(jié)構(gòu) ALTER TABLE MyTable ALTER COLUMN NullCOl NVARCHAR(20) NOT NULL ALTER TABLE jobs ADD HIRE_DATE DATETIME ALTER TABLE Doc_ED DROP COLUMN Column_B ALTER TABLE Doc_ED WITH NOCHECK ADD CONSTRAINT Exd_Check CHECK (Column_a 1) l 在已有字段中增加標(biāo)識(shí)約束時(shí),必須先刪 除該字段,再新建字段。 alter table mytable dro
21、p column userid alter table mytable add userid int identity(1,1) l刪除表 DROP TABLE Airlines_Master lDEFAULT 約束 USE Northwind CREATE TABLE ABC (ASD int Default 8, ASDE varchar(20) Default UNKNOWN) USE Northwind ALTER TABLE dbo.Customers ADD CONSTRAINT DF_contactname DEFAULT UNKNOWN FOR ContactName l CH
22、ECK 約束 CREATE TABLE ABCD (ASD int CHECK(ASD 01-01-1900 AND BirthDate 0-011-2010) PRIMARY KEY 約束 CREATE TABLE AWC (ASD int CHECK(ASD 100) PRIMARY KEY ASDE varchar(80) Default UNKNOWN) USE Northwind ALTER TABLE Customers ADD CONSTRAINT PK_Customers PRIMARY KEY (CustomerID) l UNIQUE 約束 CREATE TABLE AAC
23、 (ASD int CHECK(ASD 100) PRIMARY KEY , ASDE int UNIQUE) USE Northwind ALTER TABLE Suppliers ADD CONSTRAINT U_CompanyName UNIQUE (CompanyName) l FOREIGN KEY 約束 CREATE TABLE ACC (ASD int CHECK(ASD + type As MyTitle FROM titles 3. 聚合函數(shù) SELECT productid ,SUM(quantity) AS total_quantity FROM orderhist GR
24、OUP BY productid 顯示所有 type 的值,并按 type 分組求平均值 SELECT type, AVG(price) FROM titles WHERE royalty = 10 GROUP BY ALL type 條件中帶有聚合函數(shù)的,要用 Having 子句 SELECT productid, SUM(quantity) AS total_quantity FROM orderhist GROUP BY productid HAVING SUM(quantity)=30 4. 模糊查詢 WHERE companyname LIKE %Restaurant% WHERE
25、fax IS NULL WHERE country IN (Japan, Italy) WHERE unitprice BETWEEN 10 AND 20 1.說明:復(fù)制表 (只復(fù)制結(jié)構(gòu) ,源表名: a 新表名: b) SQL: select * into b from a where 11 2.說明:拷貝表 (拷貝數(shù)據(jù) ,源表名: a 目標(biāo)表名: b) SQL: insert into b(a, b, c) select d,e,f from b; 3. 說明:顯示文章、提交人和最后回復(fù)時(shí)間 SQL: select a.title,a.username,b.adddate from tabl
26、e a,(select max(adddate) adddate from table where table.title=a.title) b 4. 說明:外連接查詢 (表名 1:a 表名 2:b) SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUTER JOIN b ON a.a = b.c 5. 說明:日程安排提前五分鐘提醒 SQL: select * from 日程安排 where datediff(minute,f 開始時(shí)間 ,getdate()5 6. 說明:兩張關(guān)聯(lián)表,刪除主表中已經(jīng)在副表中沒有 的信息 SQL: de
27、lete from info where not exists ( select * from infobz where info.infid=infobz.infid ) 說明: - SQL: SELECT A.NUM, A.NAME, B.UPD_DATE, B.PREV_UPD_DATE FROM TABLE1, (SELECT X.NUM, X.UPD_DATE, Y.UPD_DATE PREV_UPD_DATE FROM (SELECT NUM, UPD_DATE, INBOUND_QTY , STOCK_ONHAND FROM TABLE2 WHERE TO_CHAR(UPD_DA
28、TE,YYYY/MM) TO_CHAR(SYSDATE, YYYY/MM) X, (SELECT NUM, UPD_DATE, STOCK_ONHAND FROM TABLE2 WHERE TO_CHAR(UPD_DATE,YYYY/MM) = 1, + TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, YYYY/MM) | /01,YYYY/MM/DD) YYYY/MM) ) Y , WHERE X.NUM = Y .NUM (+) AND X.INBOUND_QTY NVL(Y .STOCK_ONHAND,0) X.STOCK_ONHAND ) B WHERE A.NUM
29、= B.NUM 說明: SQL: select * from studentinfo where not exists(select * from student where studentinfo.id=student.id) and 系 名 稱 =&strdepartmentname& and 專 業(yè) 名 稱 =&strprofessionname& order by 性別 ,生源地 ,高考 總成績(jī) 7. 說明: 從數(shù)據(jù)庫(kù)中去一年的各單位電話費(fèi)統(tǒng)計(jì) ( 電話費(fèi)定額 賀電化肥清單兩個(gè)表來源) SQL: SELECT a.userper, a.tel, a.standfee, TO_CHAR(
30、a.telfeedate, yyyy) AS telyear, SUM(decode(TO_CHAR(a.telfeedate, mm), 01, a.factration) AS JAN, SUM(decode(TO_CHAR(a.telfeedate, mm), 02, a.factration) AS FRI, SUM(decode(TO_CHAR(a.telfeedate, mm), 03, a.factration) AS MAR, SUM(decode(TO_CHAR(a.telfeedate, mm), 04, a.factration) AS APR, SUM(decode(T
31、O_CHAR(a.telfeedate, mm), 05, a.factration) AS MAY, SUM(decode(TO_CHAR(a.telfeedate, mm), 06, a.factration) AS JUE, SUM(decode(TO_CHAR(a.telfeedate, mm), 07, a.factration) AS JUL, SUM(decode(TO_CHAR(a.telfeedate, mm), 08, a.factration) AS AGU, SUM(decode(TO_CHAR(a.telfeedate, mm), 09, a.factration)
32、AS SEP, SUM(decode(TO_CHAR(a.telfeedate, a.factration) AS OCT, mm), 10, SUM(decode(TO_CHAR(a.telfeedate, mm), 11, a.factration) AS NOV, SUM(decode(TO_CHAR(a.telfeedate, mm), 12, a.factration) AS DEC FROM (SELECT a.userper, a.tel, a.standfee, b.telfeedate, b.factration FROM TELFEESTAND a, TELFEE b WH
33、ERE a.tel = b.telfax) a GROUP BY a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, yyyy) 8. 說明:四表聯(lián)查問題: SQL: select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where 9. 說明:得到表中最小的未使用的 ID 號(hào) SQL: SELECT (CASE WHEN EXISTS(SELECT * FROM Handle b WHERE b.H
34、andleID = 1) THEN MIN(HandleID) + 1 ELSE 1 END) as HandleID FROM Handle WHERE NOT HandleID IN (SELECT a.HandleID - 1 FROM Handle a) 9.SQL 語句技巧 9.1、一個(gè) SQL 語句的問題 :行列轉(zhuǎn)換 select * from v_temp 上面的視圖結(jié)果如下 : user_name role_name 系統(tǒng)管理員 管理員 feng 管理員 feng 一般用戶 test 一般用戶 想把結(jié)果變成這樣 : user_name role_name 系統(tǒng)管理員 管理員 f
35、eng 管理員 ,一般用戶 test 一般用戶 create table a_test(name varchar(20),role2 varchar(20) insert into a_test values李,管理員) insert into a_test values張,管理員) insert into a_test values張,一般用戶) insert into a_test values(常,一般用戶) create function join_str(content varchar(100) returns varchar(2000) as begin declare str v
36、archar(2000) set str= select str=str+,+rtrim(role2) from a_test where name=content select str=right(str,len(str)-1) return str end go -調(diào)用: select name,dbo.join_str(name) role2 from a_test group by name -select distinct name,dbo.uf_test(name) from a_test 9.2、求助!快速比較結(jié)構(gòu)相同的兩表 結(jié)構(gòu)相同的兩表,一表有記錄 3 萬條左右,一表有記 錄
37、 2 萬條左右,我怎樣快速查找兩表的不同記錄? 給你一個(gè)測(cè)試方法,從 northwind 中的 orders 表取數(shù) 據(jù)。 select * into n1 from orders select * into n2 from orders select * from n1 select * from n2 -添加主鍵,然后修改 n1 中若干字段的若干條 alter table n1 add constraint pk_n1_id primary key (OrderID) alter table n2 add constraint pk_n2_id primary key (OrderID)
38、select OrderID from (select * from n1 union select * from n2) a group by OrderID having count(*) 1 應(yīng)該可以,而且將不同的記錄的 ID 顯示出來。 下面的適用于雙方記錄一樣的情況, select * from n1 where orderid in ( select OrderID from (select * from n1 union select * from n2) a group by OrderID having count(*) 1 ) 至于雙方互不存在的記錄是比較好處理的 - 刪除
39、 n1,n2 中若干條記錄 delete from n1 where orderID in (10728,10730) delete from n2 where orderID in (11000,11001) * * - 雙方都有該記錄卻不完全相同 select * from n1 where orderid in ( select OrderID from (select * from n1 union select * from n2) a group by OrderID having count(*) 1 ) union -n2 中存在但在 n1 中不存的在 10728,10730
40、select * from n1 where OrderID not in (select OrderID from n2) union -n1 中存在但在 n2 中不存的在 11000,11001 select * from n2 where OrderID not in (select OrderID from n1) 9.3、四種方法取表里 n 到 m 條紀(jì)錄: 1. select top m * into 臨時(shí)表 (或表變量 ) from tablename order by columnname - 將 top m 筆插入 set rowcount n select * from 表
41、變量 order by columnname desc 2. select top n * from (select top m * from tablename order by columnname) a order by columnname desc 3如果table name里沒有其他ide ntity列,那么: select identity(int) id0,* into #temp from tablename 取n到m條的語句為: select * from #temp where id0 =n and id0 1 exec(sql) open cur_rows fetch
42、cur_rows into id,max while fetch_status=0 begin select max = max -1 set rowcount max select type = xtype from syscolumns where id=object_id(t_name) and name=f_key if type=56 select sql = delete from +t_name+ where + f_key+ = + id if type=167 select sql = delete from +t_name+ where + f_key+ = + id +
43、exec(sql) fetch cur_rows into id,max end close cur_rows deallocate cur_rows set rowcount 0 end select * from systypes select * from syscolumns where id = object_id(a_dist) 9.4. 查詢數(shù)據(jù)的最大排序問題(只能用一條語句寫) CREATE TABLE hard (qu char (11) ,co char (11) ,je numeric(3, 0) insert into hard values (A,1,3) inser
44、t into hard values (A,2,4) insert into hard values (A,4,2) insert into hard values (A,6,9) insert into hard values (B,1,4) insert into hard values (B,2,5) insert into hard values (B,3,6) insert into hard values (C,3,4) insert into hard values (C,6,7) insert into hard values (C,2,3) 要求查詢出來的結(jié)果如下: qu c
45、o je A 6 9 A 2 4 B 3 6 B 2 5 C 3 4 就是要按 qu 分組,每組中取 je 最大的前 2 位! 而且只能用一句 sql 語句! select * from hard a where je in (select top 2 je from hard b where a.qu=b.qu order by je) 9.5. 求刪除重復(fù)記錄的 sql 語句? 怎樣把具有相同字段的紀(jì)錄刪除,只留下一條。 例如,表test里有id,name字段 如果有name相同的記錄只留下一條,其余的刪除。 name的內(nèi)容不定,相同的記錄數(shù)不定。 有沒有這樣的 sql 語句? A: 個(gè)完
46、整的解決方案: 將重復(fù)的記錄記入 temp1 表: select 標(biāo)志字段 id,count(*) into temp1 from 表名 group by 標(biāo)志字段 id having count(*)1 2、將不重復(fù)的記錄記入 temp1 表: insert temp1 select 標(biāo)志字段 id,count(*) from 表名 group by 標(biāo)志字段 id having count(*)=1 3、作一個(gè)包含所有不重復(fù)記錄的表: select * into temp2 from 表名 where 標(biāo)志字段 id in(select 標(biāo)志字段 id from temp1) 4、刪除重復(fù)
47、表 : delete 表名 5、恢復(fù)表: insert 表名 select * from temp2 6、刪除臨時(shí)表 : drop table temp1 drop table temp2 B: create table a_dist(id int,name varchar(20) insert into a_dist values(1,abc) insert into a_dist values(1,abc) insert into a_dist values(1,abc) insert into a_dist values(1,abc) exec up_distinct a_dist,id
48、 select * from a_dist create procedure up_distinct(t_name varchar(30),f_key varchar(30) -f_key表示是分組字段,即主鍵字段 as begin declare max integer,id varchar(30) ,sql varchar(7999) ,type integer select sql = declare cur_rows cursor for select +f_key+ ,count(*) from +t_name + group by +f_key + having count(*)
49、1 exec(sql) open cur_rows fetch cur_rows into id,max while fetch_status=0 begin select max = max -1 set rowcount max select type = xtype from syscolumns where id=object_id(t_name) and name=f_key if type=56 select sql = delete from +t_name+ where + f_key+ = + id if type=167 select sql = delete from +
50、t_name+ where + f_key+ = + id + exec(sql) fetch cur_rows into id,max end close cur_rows deallocate cur_rows set rowcount 0 end select * from systypes select * from syscolumns where id = object_id(a_dist) 10.1. 行列轉(zhuǎn)換 -普通 假設(shè)有張學(xué)生成績(jī)表(CJ)如下 Name Subject Result 張三 語文 80 張三 數(shù)學(xué) 90 張三 物理 85 李四 語文 85 李四 數(shù)學(xué) 92
51、李四 物理 82 想變成 姓名 語文 數(shù)學(xué) 物理 張三 80 90 85 李四 85 92 82 declare sql varchar(4000) set sql = select Name select sql = sql + ,sum(case Subject when +Subject+ then Result end) +Subject+ from (select distinct Subject from CJ) as a select sql = sql+ from test group by name exec(sql) 10.2. 行列轉(zhuǎn)換 -合并 有表 A, id pid
52、1 1 1 2 1 3 2 1 2 2 3 1 如何化成表 B: id pid 1 1,2,3 2 1,2 3 1 創(chuàng)建一個(gè)合并的函數(shù) create function fmerg(id int) returns varchar(8000) as begin declare str varchar(8000) set str= select str=str+,+cast(pid as varchar) from 表 A where id=id set str=right(str,len(str)-1) return(str) End go -調(diào)用自定義函數(shù)得到結(jié)果 select distinct
53、 id,dbo.fmerg(id) from 表 A 10.3. 如何取得一個(gè)數(shù)據(jù)表的所有列名 方法如下:先從 SYSTEMOBJECT 系統(tǒng)表中取得數(shù)據(jù) 表的 SYSTEMID, 然后再 SYSCOLUMN 表中取得該數(shù) 據(jù)表的所有列名。 SQL 語句如下: declare objid int,objname char(40) set objname = tablename select objid = id from sysobjects where id = object_id(objname) select Column_name = name from syscolumns wher
54、e id = objid order by colid 是不是太簡(jiǎn)單了? 呵呵 不過經(jīng)常用阿 . 10.4. 通過 SQL 語句來更改用戶的密碼 修改別人的 ,需要 sysadmin role EXEC sp_password NULL, newpassword, User 如 果 帳 號(hào) 為 SA 執(zhí) 行 EXEC sp_password NULL, newpassword, sa 10.5. 怎么判斷出一個(gè)表的哪些字段不允許為空? select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where IS_NULLABLE=NO and TABL
55、E_NAME=tablename 10.6. 如何在數(shù)據(jù)庫(kù)里找到含有相同字段的表? a. 查已知列名的情況 SELECT as TableName, as columnname From syscolumns a INNER JOIN sysobjects b ON a.id=b.id AND b.type=U AND =你的字段名字 b. 未知列名查所有在不同表出現(xiàn)過的列名 Select As tablename, As columnname From syscolumns s1, sysobjects o Where s1.
56、id = o.id And o.type = U And Exists ( Select 1 From syscolumns s2 Where = And s1.id s2.id ) 10.7. 查詢第 xxx 行數(shù)據(jù) 假設(shè) id 是主鍵: select * from (select top xxx * from yourtable) aa where not exists(select 1 from (select top xxx-1 * from yourtable) bb where aa.id=bb.id) 如果使用游標(biāo)也是可以的 fetch absol
57、ute number from cursor_name 行數(shù)為絕對(duì)行數(shù) 10.8. SQL Server 日期計(jì)算 a. 一個(gè)月的第一天 SELECT DATEADD(mm, DATEDIFF(mm,0,getdate(), 0) b. 本周的星期一 SELECT DATEADD(wk, DATEDIFF(wk,0,getdate(), 0) c. 一年的第一天 SELECT DATEADD(yy, DATEDIFF(yy,0,getdate(), 0) d. 季度的第一天 SELECT DATEADD(qq, DATEDIFF(qq,0,getdate(), 0) e. 上個(gè)月的最后一天 S
58、ELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate(), 0) f. 去年的最后一天 SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate(), 0) g. 本月的最后一天 SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate()+1, 0) h. 本月的第一個(gè)星期一 select DATEADD(wk, DATEDIFF(wk,0, dateadd(dd,6-datepart(day,getdate(),getdate() ),
59、 0) i. 本年的最后一天 SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()+1, 0)。 11.1.獲取表結(jié)構(gòu) 把 sysobjects 替換 成 tablename 即可 SELECT CASE IsNull(I.name, ) When Then Else * End as IsPK, Object_Name(A.id) as t_name, A.name as c_name, IsNull(SubString(M.text, 1, 254), ) as pbc_init, T.name as F_DataType, CA
60、SE IsNull(TYPEPROPERTY(T.name, Scale), ) WHEN Then Cast(A.prec as varchar) ELSE Cast(A.prec as varchar) + , + Cast(A.scale as varchar) END as F_Scale, A.isnullable as F_isNullAble FROM Syscolumns as A JOIN Systypes as T ON (A.xType = T.xUserType AND A.Id = Object_id(sysobjects) ) LEFT JOIN ( SysInde
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 多中心性網(wǎng)狀組織細(xì)胞增生癥的臨床護(hù)理
- 急性心力衰竭的護(hù)理
- 《第一章》課件-第七章第一節(jié):大數(shù)據(jù)技術(shù)與應(yīng)用-應(yīng)用場(chǎng)景
- 《第一章》課件-第七章第二節(jié):大數(shù)據(jù)技術(shù)與應(yīng)用-技術(shù)體驗(yàn)-天貓大數(shù)據(jù)之?dāng)?shù)據(jù)清洗
- 妊娠合并甲狀腺功能亢進(jìn)的臨床護(hù)理
- 癤癰的臨床護(hù)理
- 孕期臉色發(fā)黃的健康宣教
- 腺樣體切除術(shù)的健康宣教
- JJF(陜) 017-2019 數(shù)字溫濕度計(jì)校準(zhǔn)規(guī)范
- 模擬電子電路基礎(chǔ)課件大全課件
- 國(guó)企礦業(yè)招聘考試題庫(kù)答案
- 常用統(tǒng)計(jì)技術(shù)在質(zhì)量管理中的應(yīng)用
- 初中圖書目錄
- 礦山爆破安全知識(shí)
- 搞笑小品劇本《白蛇前傳》劇本臺(tái)詞完整版
- 某中央空調(diào)機(jī)房拆除施工方案
- 高速路政員年度工作總結(jié)
- 面試著裝與禮儀通用課件
- 新生兒凝血功能異常的護(hù)理課件
- 山東省日照市五蓮縣2023-2024學(xué)年七年級(jí)上學(xué)期期末數(shù)學(xué)試題
- 理論力學(xué)全部教程通用課件
評(píng)論
0/150
提交評(píng)論