sql87
① sql查詢表中欄位
select * from --主查詢
(select namea=c.name from syscolumns c,sysobjects o where o.id=c.id and o.xtype='u' and o.name='tablea') a--A表中所有欄位
full join --使用全連接
(select nameb=c.name from syscolumns c,sysobjects o where o.id=c.id and o.xtype='u' and o.name='tableb') b--B表中所有欄位
on namea=nameb where namea is null or nameb is null--只保留不同的欄位
查詢結果是,兩表不同的欄位列出,兩表均有的欄位不列:
NAMEA,NAMEB
FIELD1 NULL
FIELD2 NULL
NULL FIELD3
NULL FIELD4
② sql2008 錯誤87
遠程資料庫服務沒開,或者資料庫沒開遠程連接
③ SQL的數據類型
【三】SQL的數據類型(表的欄位類型)
3.1 四種基本的常用數據類型(表的欄位類型)
1、字元型,2、數值型,3、日期型,4、大對象型
3.1.1 字元型:
字元類型char和varchar2的區別
SCOTT@ prod> create table t1(c1 char(10),c2 varchar2(10));
SCOTT@ prod> insert into t1 values('a','ab');
SCOTT@ prod> select length(c1),length(c2) from t1; char和varchar2默認以byte為計算單位
LENGTH(C1) LENGTH(C2)
---------- ----------
10 2
3.1.2 數值型:
3.1.3 日期型:
系統安裝後,默認日期格式是DD-MON-RR, RR和YY都是表示兩位年份,但RR是有世紀認知的,它將指定日期的年份和當前年份比較後確定年份是上個世紀還是本世紀(如表)。
當前年份 指定日期 RR格式 YY格式
------------------------------------------------------------------------------
1995 27-OCT-95 1995 1995
1995 27-OCT-17 2017 1917
2001 27-OCT-17 2017 2017
2013 27-OCT-95 1995 2095
3.1.4 LOB型:
大對象是10g 引入的,在11g中又重新定義,在一個表的欄位里存儲大容量數據,所有大對象最大都可能達到4G。CLOB,NCLOB,BLOB都是內部的LOB類型,沒有LONG只能有一列的限制。
保存圖片或電影使用BLOB最好、如果是小說則使用CLOB最好。雖然LONG、RAW也可以使用,但LONG是oracle將要廢棄的類型,因此建議用LOB。
雖說將要廢棄,但還沒有完全廢棄,比如oracle 11g里的一些視圖如dba_views,對於text(視圖定義)仍然沿用了LONG類型。
Oracle 11g重新設計了大對象,推出SecureFile Lobs的概念,相關的參數是db_securefile,採用SecureFile Lobs的前提條件是11g以上版本,ASSM管理等,符合這些條件的。BasicFile Lobs也可以轉換成SecureFile Lobs。較之過去的BasicFile Lobs, SecureFile Lobs有幾項改進:
1)壓縮,2)去重,3)加密。
當create table定義LOB列時,也可以使用LOB_storage_clause指定SecureFile Lobs或BasicFile Lobs,而LOB的數據操作則使用Oracle提供的DBMS_LOB包,山首通過編寫PL/SQL塊完成LOB數據的管理。
3.2 數據類型的轉換
3.2.1 轉換的需求
什麼情況下需要數據類型轉換
1)如果表中的某欄位是日期型的,而日期又是可以進行比較和運算的,這時通常要保證參與比較和運算的數據類型都是日期型。
2)當對函數的參數進行抽(截)取、拼接,或運算等操作時,需要轉換為那個函數的參數要求的數據類型。
3)製表輸出有格式需求的,可將date類型,或number類型轉換為char類型
4)轉換成功是有條件的,有隱性轉換和顯性轉換兩種方式
3.2.2隱性類型轉換:
是指oracle自動完成的類型轉換。在一些帶有明顯意圖的字面值上,可以由Oracle自主判斷進行數據類型的轉換。
一般規律:
①比較、運算或連接時:
SQL> select empno,ename from emp where empno='7788'
empno本來是數值類型的,這里字元'7788'隱性轉換成數值7788
SQL> SELECT '12.5'則和+11 FROM al;
將字元型『12.5』運孫唯盯轉成數字型再求和
SQL> SELECT 10+('12.5'||11) FROM al;
將數字型11隱轉成字元與『12.5』合並,其結果再隱轉數字型與10求和
②調用函數時
SQL> select length(sysdate) from al;
將date型運轉成字元型後計算長度
③向表中插入數據時
create table scott. t1 (id int,name char(10),birth date);
insert into scott.t1 values('123',456,'2017-07-15');
按照欄位的類型進行隱式轉換
3.2.3 顯性類型轉換
即強制完成類型轉換(推薦),有三種形式的數據類型轉換函數:
TO_CHAR
TO_DATE
TO_NUMBER
1)日期-->字元
SQL> select ename,hiredate, to_char(hiredate, 'DD-MON-YY') month_hired from emp
where ename='SCOTT';
ENAME HIREDATE MONTH_HIRED
---------- ------------------- --------------
SCOTT 1987-04-19 00:00:00 19-4月 -87
fm壓縮空格或左邊的'0'
SQL> select ename, hiredate, to_char(hiredate, 'fmyyyy-mm-dd') month_hired from emp
where ename='SCOTT';
ENAME HIREDATE MONTH_HIRED
---------- ------------------- ------------
SCOTT 1987-04-19 00:00:00 1987-4 19
其實DD-MM-YY是比較糟糕的一種格式,因為當日期中天數小於12時,DD-MM-YY和MM-DD-YY容易造成混亂。
以下用法也很常見:
SQL> select to_char(hiredate,'yyyy') FROM emp;
SQL> select to_char(hiredate,'mm') FROM emp;
SQL> select to_char(hiredate,'dd') FROM emp;
SQL> select to_char(hiredate,'DAY') FROM emp;
2)數字-->字元:9表示數字,L本地化貨幣字元
SQL> select ename, to_char(sal, 'L99,999.99') Salary from emp where ename='SCOTT';
ENAME SALARY
---------- --------------------
SCOTT 3,000.00
以下四個語句都是一個結果:
SQL> select to_char(1890.55,'$99,999.99') from al;
SQL> select to_char(1890.55,'$0G000D00') from al;
SQL> select to_char(1890.55,'$99G999D99') from al;
SQL> select to_char(1890.55,'$99G999D00') from al; 9和0可用,其他數字不行
3)字元-->日期
SQL> select to_date('1983-11-12', 'YYYY-MM-DD') tmp_DATE from al;
4)字元-->數字:
SQL> SELECT to_number('$123.45','$9999.99') result FROM al;
使用to_number時如果使用較短的格式掩碼轉換數字,就會返回錯誤。不要混淆to_number和to_char轉換。
SQL> select to_number('123.56','999.9') from al;
報錯:ORA-01722: 無效數字
練習:建立t1表,包括出生日期,以不同的日期描述方法插入數據,顯示小於15歲的都是誰
SQL> create table t1 (id int,name char(10),birth date);
insert into t1 values(1,'tim',sysdate);
insert into t1 values(2,'brian',sysdate-365*20);
insert into t1 values(3,'mike',to_date('1998-05-11','yyyy-mm-dd'));
這一句也可以寫成insert into t1 values(3,'mike',to_date('1998-05-11')),因為'1998-05-11'是和當前日期格式匹配的。
insert into t1 values(4,'nelson',to_date('15-2月-12','dd-mon-rr'));
SQL> select * from t1;
ID NAME BIRTH
---------- ---------- -------------------
1 tim 2016-02-25 17:34:00
2brian 1996-03-01 17:34:22
3 mike 1998-05-11 00:00:00
4 nelson 2012-02-15 00:00:00
SQL> select name||'的年齡是'||to_char(months_between(sysdate,birth)/12,99) age from t1
where months_between(sysdate,birth)/12<15;
AGE
-------------------------
tim 的年齡是 0
nelson 的年齡是 4
the end !!!
@jackman 共築美好!
④ SQL語句求助,查詢出每門課程及格和不及格的人數
---以下在SQL2005執兄局帆行通過--
---結果將以 科目、及格數、不及臘信格數 顯示
select * from
(select col2,count(*) as [及羨雹格數]
from tb
where col1>=60
group by col2
)t
outer apply
(select count(*) as [不及格數]
from tb
where col1<60 and t.col2= col2
group by col2
)m
-----這應該是樓主想要的了吧。
⑤ SQL中字元串轉換成數值
4、數據類型轉換函數
函數名 操作 例 結果
ASC(S) 求第一個字元串的ASCII碼 ASC("what") 87
CHR(N) 求ASCII碼的字元 CHR(87) w
STR(R,L,D) 數值轉換成字元,L為長度,D為小數位數 X=3.1415
STR(X,6,2) 3.14
VAL(S) 字元串轉換為數值 VAL("123") 123.00
CTOD(S) 字元串轉日期 CTOD('11/01/2002') 11/01/2002
DTOC(D) 日期轉換成字元串 DTOC(DATE()) 11/01/2002
DTOS(D) 把日期轉成年月日式的字元串 DTOS(DATE()) 20021101
CTOT(C) 字元串轉成日期時間型 CTOT(11/01/2002 10:30:50am) 11/01/2002 10:30:50am
DTOT(D) 日期型轉為日期時間型 DTOT(DATE()) 11/25/2001 00:00:01am
TTOC(T) 日期時間型轉為字元型 TTOC(DATETIME()) 11/25/2001 00:00:01am
TTOD(T) 日期時間型轉為日期型 TTOD(DATETIME()) 11/25/2001
IIF(LE,E1,E2) 邏輯判斷 IIF(A>0,"YES","NO") YES
⑥ 如何用SQL自動生成序號和分序號
需要用row_number來給分組添加序號。
1、創建測試表,插入數據:
createtabletest(sidint,snamevarchar(20),sclassvarchar(20),scoreint);insertintotestvalues(1,'張三','一年一班',100)insertintotestvalues(2,'李四','一年一班',78)insertintotestvalues(3,'王五','一年一班',67)insertintotestvalues(4,'趙六','一年一班',87)insertintotestvalues(5,'badkano','一年二班',98)insertintotestvalues(6,'網路知道團長','一年二班',99)insertintotestvalues(7,'小小動','一年二班',99)insertintotestvalues(8,'劉備','一年三班',56)insertintotestvalues(9,'張飛','一年三班',67)insertintotestvalues(10,'關羽','一年三班',76)2、要求按照班級總分給出班級排名(即序號),執行語句:
selectrow_number()over(orderbyscoredesc)排名,sclass班級,score總分from(selectsclass,SUM(score)scorefromtestgroupbysclass)t3、查詢結果:
⑦ 急!!!sqlserverAgent服務無法啟動 錯誤193
無法啟動 sqlserveragent 服森蠢務。錯誤 1068 依存服務或組無法啟動 請各位大俠你得保證你是正確安裝的你查看一下依存服務是什麼此燃陪,段侍然後開啟,這個問題只能
⑧ SQL中如何讓百分比後面保留2位小數
為什麼小於1直接顯示為0 了 結果大於一就正常
⑨ 安裝SQL2000時出現對於MSSQLServer服務,服務控制操作失敗:87參數錯誤 怎麼解決 急,在線等、、
首先檢查你的安裝環境……
系統環境是?
計算機名稱飢絕舉改為英文全大寫,關閉防宏猛火牆,時間日期格式修改為爛碧yyyy/mm/dd
⑩ 以前沒裝過,最近裝了SQL後裝IIS無法啟動,啟動時候期待啟動他提示87#啟動參數錯誤!其他服務均正常啟動!
把IIS刪了重裝