sql培訓(xùn)內(nèi)容(精簡(jiǎn))
作者:vlife
SQL定義:SQL是一種面向數(shù)據(jù)庫(kù)的通用數(shù)據(jù)處理語(yǔ)言規(guī)范,能完成以下幾類功能:提取查詢數(shù)據(jù),插入修改刪除數(shù)據(jù),生成修改和刪除數(shù)據(jù)庫(kù)對(duì)象,數(shù)據(jù)庫(kù)安全控制,數(shù)據(jù)庫(kù)完整性及數(shù)據(jù)保護(hù)控制。
SQL分類:
DDL—數(shù)據(jù)定義語(yǔ)言(CREATE,ALTER,DROP,DECLARE)
DML—數(shù)據(jù)操縱語(yǔ)言(SELECT,DELETE,UPDATE,INSERT)
DCL—數(shù)據(jù)控制語(yǔ)言(GRANT,REVOKE,COMMIT,ROLLBACK)
db2數(shù)據(jù)類型
CHAR():定長(zhǎng)字符串 最大長(zhǎng)度為 254
VARCHAR():變長(zhǎng)字符 最大長(zhǎng)度為 4000
SMALLINT:短整型數(shù)字 長(zhǎng)度為 2 字節(jié)
INTEGER:整型數(shù)字 長(zhǎng)度為 4 字節(jié)
REAL:?jiǎn)尉雀↑c(diǎn) 32 位近似值
DOUBLE:雙精度浮點(diǎn) 64 位近似值
DECIMAL(m,n):數(shù)字 精度為m小數(shù)位為n
DATE:日期時(shí)間
TIME:日期時(shí)間
TIMESTAMP:日期時(shí)間
DDL—數(shù)據(jù)庫(kù)定義語(yǔ)言:直接提交的。
CREATE:用于創(chuàng)建數(shù)據(jù)庫(kù)對(duì)象。
DECLARE:除了是創(chuàng)建只在過(guò)程中使用的臨時(shí)表外,DECLARE語(yǔ)句和CREATE語(yǔ)句非常相似。唯一可以被聲明的對(duì)象是表。并且必須放入用戶臨時(shí)表空間。
DROP:可以刪除任何用CREATE(數(shù)據(jù)庫(kù)對(duì)象)和DECLARE(表)創(chuàng)建的對(duì)象。
ALTER:允許修改某些數(shù)據(jù)庫(kù)對(duì)象的信息。不能修改索引。
下面主要基于對(duì)象介紹基本的語(yǔ)法:
1、數(shù)據(jù)庫(kù):
創(chuàng)建數(shù)據(jù)庫(kù):CREATE DATABASE database-name [USING CODESET codeset TERRITORY territory]
注:代碼頁(yè)的問(wèn)題。
刪除數(shù)據(jù)庫(kù):drop database dbname
2、表:
創(chuàng)建新表:
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
根據(jù)已有的表創(chuàng)建新表:
A:create table tab_new like tab_old
B:create table tab_new as select col1,col2… from tab_old definition only
修改表:
增加一個(gè)列:
Alter table tabname add column col type
注:列增加后將不能刪除。DB2中列加上后數(shù)據(jù)類型也不能改變,唯一能改變的是增加varchar類型的長(zhǎng)度。添加主鍵:
Alter table tabname add primary key(col)
刪除主鍵:
Alter table tabname drop primary key(col)
刪除表:drop table tabname
3、表空間:
創(chuàng)建表空間:create tablespace tbsname pagesize 4k managed by database using (file ‘file’ size)
表空間加入容器:alter tablespace tablespace_name add(file 'filename' size)
注:該操作是不可逆的,加入容器后將不能將其刪除,因此在加入的時(shí)候注意。
刪除表空間:drop tablespace tbsname
4、索引:
創(chuàng)建索引:create [unique] index idxname on tabname(col….)
刪除索引:drop index idxname
注:索引是不可更改的,想更改必須刪除重新建。
5、視圖:
創(chuàng)建視圖:create view viewname as select statement
刪除視圖:drop view viewname
注:視圖唯一能修改的是引用類型列,改變列的范圍。其他定義好了都不能修改。當(dāng)視圖基于的基表drop后,視圖變?yōu)闊o(wú)效。
DML—數(shù)據(jù)庫(kù)操縱語(yǔ)言,它不隱式地提交當(dāng)前事務(wù) ,是否提交視環(huán)境設(shè)定而定。
SELECT:從表中查詢符合數(shù)據(jù)
注:條件中連接的問(wèn)題,避免出現(xiàn)笛卡兒乘積
DELETE:刪除已有表的數(shù)據(jù)
UPDATE:更新已有表的數(shù)據(jù)
INSERT:向已有表中插入數(shù)據(jù)
注:DELETE,UPDATE和INSERT是否直接提交取決與執(zhí)行語(yǔ)句所在的環(huán)境。
在執(zhí)行時(shí)注意事務(wù)日志滿的情況。
1、select時(shí),注意索引謂詞和非索引謂詞,盡量在有索引的列上使用索引謂詞。
謂詞類型 可索引 注 釋
Col∝con Y ∝代表>;,>;=,=,<=,<,但是<>;不是可索引的。
Col between con1 and con2 Y 在匹配系列中必須是最后的。
Col in list Y 僅對(duì)一個(gè)匹配列
Col is null Y
Col like ‘xyz%’ Y 模糊匹配%在后面。
Col like ‘%xyz’ N 模糊匹配%在前面。
Col1∝Col2 N Col1和col2來(lái)自同一個(gè)表
Col∝Expression N 例如:c1(c1+1)/2
Pred1 and Pred2 Y Pred1和Pred2都是可索引的,指相同索引的列
Pred1 or Pred2 N 除了(c1=a or c1=b)外,他可以被認(rèn)為是c1 in(a,b)
Not Pred1 N 或者任何的等價(jià)形式:Not between,Not in,Not like等等。
使用索引的例子介紹:
<1>;、單個(gè)表上索引查詢的介紹 :
A:select * from t1 where c1 = 10;
在c1列上無(wú)索引,如何檢索
在c1列上有索引,如何檢索
B:select * from t1 where c1 =10 and c2 between 5 and 10 and c3 like ‘A%’
僅在c1列上有索引
在c1,c2和c3列上有單獨(dú)的索引
在c1,c2和c3列上有聯(lián)合索引
此處可以填加索引匹配規(guī)則和高級(jí)規(guī)則,比較難理解!!
<2>;、兩個(gè)或多個(gè)表上索引查詢的介紹:
(1)、使用循環(huán)嵌套法執(zhí)行查詢
A:select t1.c1,t1.c2,t2.c3,t2.c4 from t1,t2 where t1.c1=10 and t1.c2 =t2.c3
介紹查詢的方法,看看哪列上最需要索引。
B:select t1.c1,t1.c2,t2.c3,t2.c4 from t1,t2 where t1.c1=10 and t2.c4 = 10 and t1.c2 =t2.c3
(2)、使用歸并連接執(zhí)行連接查詢
例:select t1.c1,t1.c2,t2.c3,t2.c4 from t1,t2 where t1.c1=10 and t2.c4 = 10 and t1.c2 =t2.c3
(3)、三個(gè)以上的表進(jìn)行連接查詢采取的規(guī)則或者方法
(2)、GROUP BY:實(shí)現(xiàn)簡(jiǎn)單分組的功能,當(dāng)用group by時(shí),查詢選擇列中除了在group by中出現(xiàn)的和常量外,其他的列上要用分組函數(shù)。可以使用一些分組函數(shù)實(shí)現(xiàn)一些列不在group by中出現(xiàn),min,max等。
(3)、HAVING的使用,對(duì)一些分組列進(jìn)行條件判斷。
(4)、ORDER BY子句使得SQL在顯示查詢結(jié)果時(shí)將各返回行按順序排列,返回行的排列順序由ORDER BY 子句指定的表達(dá)式的值確定。
2、DELETE:從表中刪除記錄
語(yǔ)法格式:
DELETE FROM tablename WHERE (conditions)
3、INSERT:向表中插入記錄
語(yǔ)法格式:
INSERT INTO tablename (col1,col2,…) VALUES (value1,value2,…);
INSERT INTO tablename (col1,col2,…) VALUES (value1, value2,…), (value1, value2,…),……
Insert不會(huì)等待任何程序,不會(huì)導(dǎo)致鎖定。
4、UPDATE:
語(yǔ)法格式:
UPDATE tabname SET (col1=values1,col2=values2,…) WHERE (conditions);
注:update的速度比較慢,要在相應(yīng)列上建立索引。
DCL—數(shù)據(jù)控制語(yǔ)言
GRANT—授予用戶權(quán)限
REVOKE—撤消用戶權(quán)限
COMMIT—提交事務(wù),可以使數(shù)據(jù)庫(kù)的修改永久化
ROLLBACK—回滾事務(wù),消除上一個(gè)COMMIT命令后的所做的全部修改,使得數(shù)據(jù)庫(kù)的內(nèi)容恢復(fù)到上一個(gè)COMMIT執(zhí)行后的狀態(tài).。
1、GRANT:所有著或者管理員把訪問(wèn)權(quán)限賦給其他用戶
語(yǔ)法格式:
grant [all privileges|privileges,….] on tabname | viewname to [public|user,….]
2、REVOKE:取消某一用戶的某中訪問(wèn)權(quán)限
語(yǔ)法格式:
Revoke [all privileges|privileges,….] on tabname | viewname from [public|user,….]
注:不能取消實(shí)例級(jí)別的用戶的任何權(quán)限,他們不是通過(guò)grant授權(quán)的,是通過(guò)組實(shí)現(xiàn)的權(quán)限。
3、COMMIT:把事務(wù)中所做的修改永久化記錄到數(shù)據(jù)庫(kù)。
語(yǔ)法格式:
commit [work]
4、ROLLBACK:將上次提交以來(lái)所做的更改全部撤消。
語(yǔ)法格式:
Rollback [work]
高級(jí)sql簡(jiǎn)單介紹
一、查詢間使用運(yùn)算詞
A: UNION 運(yùn)算符
UNION 運(yùn)算符通過(guò)組合其他兩個(gè)結(jié)果表(例如 TABLE1 和 TABLE2)并消去表中任何重復(fù)行而派生出一個(gè)結(jié)果表。當(dāng) ALL 隨 UNION 一起使用時(shí)(即 UNION ALL),不消除重復(fù)行。兩種情況下,派生表的每一行不是來(lái)自 TABLE1 就是來(lái)自 TABLE2。
B: EXCEPT 運(yùn)算符
EXCEPT 運(yùn)算符通過(guò)包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重復(fù)行而派生出一個(gè)結(jié)果表。當(dāng) ALL 隨 EXCEPT 一起使用時(shí) (EXCEPT ALL),不消除重復(fù)行。
C: INTERSECT 運(yùn)算符
INTERSECT 運(yùn)算符通過(guò)只包括 TABLE1 和 TABLE2 中都有的行并消除所有重復(fù)行而派生出一個(gè)結(jié)果表。當(dāng) ALL 隨 INTERSECT 一起使用時(shí) (INTERSECT ALL),不消除重復(fù)行。
注:使用運(yùn)算詞的幾個(gè)查詢結(jié)果行必須是一致的。
二、外連接
A、left outer join:
左外連接(左連接):結(jié)果集幾包括連接表的匹配行,也包括左連接表的所有行。
B:right outer join:
右外連接(右連接):結(jié)果集既包括連接表的匹配連接行,也包括右連接表的所有行。
C:full outer join:
全外連接:不僅包括符號(hào)連接表的匹配行,還包括兩個(gè)連接表中的所有記錄。
注:復(fù)合外連接按照從左到右的順序執(zhí)行連接,左邊連接的結(jié)果集和右邊連接
三、超級(jí)分組和移動(dòng)函數(shù)
A:grouping sets:用來(lái)在單個(gè)sql中形成多級(jí)分組。
例:select company_id,node_id,count(customer_id) from customer group by grouping sets(company_id,node_id)
B:rollup:可以在單個(gè)數(shù)據(jù)庫(kù)操作中形成多個(gè)分組。
例:select company_id,node_id,count(customer_id) from customer group by rollup(company_id,node_id)
注:rollup操作不是可交換的操作,指定用戶組的順序是很重要的。
C:cube: 生成分組表中分組的所有組合。
例:select company_id,node_id,count(customer_id) from customer group by cube(company_id,node_id)
D:over:移動(dòng)函數(shù)可以幫助實(shí)現(xiàn)移動(dòng)的數(shù)據(jù)分析
Select date,avg(qty) over(order by date rows between 1 preceding and 1 following) as values from sale
附錄:常用函數(shù)介紹
1、類型轉(zhuǎn)化函數(shù):
轉(zhuǎn)化為數(shù)字類型的:
decimal, double, Integer, smallint,real
Hex(arg):轉(zhuǎn)化為參數(shù)的16進(jìn)制表示。
轉(zhuǎn)化為字符串類型的:
char, varchar
Digits(arg):返回arg的字符串表示法,arg必須為decimal。
轉(zhuǎn)化為日期時(shí)間的:
date, time,timestamp
2、時(shí)間日期:
year, quarter, month, week, day, hour, minute ,second
dayofyear(arg):返回arg在年內(nèi)的天值
Dayofweek(arg):返回arg在周內(nèi)的天值
days(arg):返回日期的整數(shù)表示法,從0001-01-01來(lái)的天數(shù)。
midnight_seconds(arg):午夜和arg之間的秒數(shù)。
Monthname(arg):返回arg的月份名。
Dayname(arg):返回arg的星期。
3、字符串函數(shù):
length,lcase, ucase, ltrim, rtrim
Coalesce(arg1,arg2….):返回參數(shù)集中第一個(gè)非null參數(shù)。
Concat (arg1,arg2):連接兩個(gè)字符串a(chǎn)rg1和arg2。
insert(arg1,pos,size,arg2):返回一個(gè),將arg1從pos處刪除size個(gè)字符,將arg2插入該位置。
left(arg,length):返回arg最左邊的length個(gè)字符串。
locate(arg1,arg2,<pos>
:在arg2中查找arg1第一次出現(xiàn)的位置,指定pos,則從arg2的pos處開始找arg1第一次出現(xiàn)的位置。
posstr(arg1,arg2):返回arg2第一次在arg1中出現(xiàn)的位置。
repeat(arg1 ,num_times):返回arg1被重復(fù)num_times次的字符串。
replace(arg1,arg2,arg3):將在arg1中的所有arg2替換成arg3。
right(arg,length):返回一個(gè)有arg左邊length個(gè)字節(jié)組成的字符串。
space(arg):返回一個(gè)包含arg個(gè)空格的字符串。
substr(arg1,pos,<length>
:返回arg1中pos位置開始的length個(gè)字符,如果沒(méi)指定length,則返回剩余的字符。
4、數(shù)學(xué)函數(shù):
Abs, count, max, min, sum
Ceil(arg):返回大于或等于arg的最小整數(shù)。
Floor(arg):返回小于或等于參數(shù)的最小整數(shù)。
Mod(arg1,arg2):返回arg1除以arg2的余數(shù),符號(hào)與arg1相同。
Rand():返回1到1之間的隨機(jī)數(shù)。
Power(arg1,arg2):返回arg1的arg2次方。
Round(arg1,arg2):四舍五入截?cái)嗵幚恚琣rg2是位數(shù),如果arg2為負(fù),則對(duì)小數(shù)點(diǎn)前的數(shù)做四舍五入處理。
Sigh(arg):返回arg的符號(hào)指示符。-1,0,1表示。
truncate(arg1,arg2):截?cái)郺rg1,arg2是位數(shù),如果arg2是負(fù)數(shù),則保留arg1小數(shù)點(diǎn)前的arg2位。
5、其他:
nullif(arg1,arg2):如果2個(gè)參數(shù)相等,則返回null,否則,返回參數(shù)1
摘要: 1.DB2
產(chǎn)品的級(jí)別有那些
?
企業(yè)版的
NTERPRISEEDITION
工作組版
WORKGROUPEDITION
企業(yè)擴(kuò)展版
ENTERPRISEEXTENDEDEDITION
個(gè)人版的
PERSONALEDITION
衛(wèi)星版的
SATELL...
閱讀全文
函數(shù)名? ? ? ? 說(shuō)明
AVG()? ? ? ? 返回一組數(shù)值的平均值
VAR(),? ? ? ? 返回一組數(shù)值的方差
ASCII()? ? ? ? 返回整數(shù)參數(shù)最左邊的字符的ASCII碼
BIGINT()? ? ? ? 返回整型常量中的數(shù)字或字符串的64位整數(shù)表示
CHAR()? ? ? ? 返回日期時(shí)間型,字符串,整數(shù),十進(jìn)制或雙精度浮點(diǎn)數(shù)的字符串表示
CHR()? ? ? ? 返回具有由參數(shù)指定的ASCII碼的字符
CONCAT(str1,str2)? ? ? ? 返回兩個(gè)字符串的連接
YEAR()? ? ? ? 返回?cái)?shù)值的年部分
UCASE()? ? ? ? 返回字符串的大寫
TIME()? ? ? ? 返回一個(gè)數(shù)值中的時(shí)間
SUBSTR(EXP1,EXP2)? ? ? ? 返回EXP1串自EXP2處開始的子串
SECOND()? ? ? ? 返回一個(gè)數(shù)值的秒部分
RTRIM()? ? ? ? 刪除字符串尾部的空格
ROUND(EXP1,EXP2)? ? ? ? 返回EXP1小數(shù)點(diǎn)右邊的第EXP2位置處開始的四舍五入值
REPLACE(EXP1,EXP2,EXP3)? ? ? ? 用EXP3替代EXP1中所有的EXP2
REAL()? ? ? ? 返回一個(gè)數(shù)值的單精度浮點(diǎn)數(shù)表示
RAND()? ? ? ? 返回0和1之間的隨機(jī)浮點(diǎn)數(shù)
POSSTR(EXP1,EXP2)? ? ? ? 返回EXP2在EXP1中的位置
MONTH()? ? ? ? 返回一個(gè)數(shù)值的月部分
MOD(EXP1,EXP2)? ? ? ? 返回EXP1除以EXP2的余數(shù)
MINUTE()? ? ? ? 返回一個(gè)數(shù)值的分鐘部分
LTRIM()? ? ? ? 刪除字符串前面的空格
HOUR()? ? ? ? 返回一個(gè)數(shù)值的小時(shí)部分
在現(xiàn)實(shí)的DB2應(yīng)用中大家可能經(jīng)常會(huì)遇到一些錯(cuò)誤,錯(cuò)誤的原因是對(duì)DB2的
限制不太了解而引起的,在此我簡(jiǎn)單地總結(jié)一下,歡迎大家繼續(xù)﹐以便和大家共享﹐
共同探討﹐共同近步﹗(以下主要以DB2 7.X為例)。
1. CHAR 的最大長(zhǎng)度(字節(jié)數(shù))<=254
2. VARCHAR 的最大長(zhǎng)度(字節(jié)數(shù))<=32672
3. LONG VARCHAR 的最大長(zhǎng)度(字節(jié)數(shù))<=32700
4. CLOB 的最大長(zhǎng)度(字節(jié)數(shù))<=2147483647
5. GRAPHICCHAR 的最大長(zhǎng)度(字節(jié)數(shù))<=127
6. VARGRAPHIC 的最大長(zhǎng)度(字節(jié)數(shù))<=16336
7. LONG VARGRAPHIC 的最大長(zhǎng)度(字節(jié)數(shù))<=16350
8. DBCLOB 的最大長(zhǎng)度(字節(jié)數(shù))<=1073741823
9. BLOB 的最大長(zhǎng)度(字節(jié)數(shù))<=2147483647
10. 字符常量的最大長(zhǎng)度(字節(jié)數(shù))<=32672
11. 圖形常量的最大長(zhǎng)度(字節(jié)數(shù))<=16336
12. 串聯(lián)字符串的最大長(zhǎng)度(字節(jié)數(shù))<=2147483647
13. 串聯(lián)圖形串的最大長(zhǎng)度(字節(jié)數(shù))<=1073741823
14. 串聯(lián)二進(jìn)制串的最大長(zhǎng)度(字節(jié)數(shù))<=2147483647
15. 十六進(jìn)制常量數(shù)字的最大長(zhǎng)度(字節(jié)數(shù))<=16336
16. 分類注釋的最大長(zhǎng)度(字節(jié)數(shù))<=254
17. 運(yùn)行時(shí)結(jié)構(gòu)類型列對(duì)象的最大長(zhǎng)度(字節(jié)數(shù))<=1
DAYNAME?????????返回一個(gè)大小寫混合的字符串,對(duì)于參數(shù)的日部分,用星期表示這一天的名稱(例如,F(xiàn)riday)。??
DAYOFWEEK????返回參數(shù)中的星期幾,用范圍在?1-7?的整數(shù)值表示,其中?1?代表星期日。??
DAYOFWEEK_ISO?返回參數(shù)中的星期幾,用范圍在?1-7?的整數(shù)值表示,其中?1?代表星期一。??
DAYOFYEAR??????????返回參數(shù)中一年中的第幾天,用范圍在?1-366?的整數(shù)值表示。??
DAYS?????????????????????返回日期的整數(shù)表示。??
JULIAN_DAY?????????返回從公元前?4712?年?1?月?1?日(儒略日歷的開始日期)到參數(shù)中指定日期值之間的天數(shù),用整數(shù)值表示。??
MIDNIGHT_SECONDS??返回午夜和參數(shù)中指定的時(shí)間值之間的秒數(shù),用范圍在?0?到?86400?之間的整數(shù)值表示。??
MONTHNAME???????????????對(duì)于參數(shù)的月部分的月份,返回一個(gè)大小寫混合的字符串(例如,January)。??
TIMESTAMP_ISO?????????根據(jù)日期、時(shí)間或時(shí)間戳記參數(shù)而返回一個(gè)時(shí)間戳記值。??
TIMESTAMP_FORMAT?從已使用字符模板解釋的字符串返回時(shí)間戳記。??
TIMESTAMPDIFF????????根據(jù)兩個(gè)時(shí)間戳記之間的時(shí)差,返回由第一個(gè)參數(shù)定義的類型表示的估計(jì)時(shí)差。??
TO_CHAR???????????????????返回已用字符模板進(jìn)行格式化的時(shí)間戳記的字符表示。TO_CHAR?是?VARCHAR_FORMAT?的同義詞。??
TO_DATE??????????????????從已使用字符模板解釋過(guò)的字符串返回時(shí)間戳記。TO_DATE?是?TIMESTAMP_FORMAT?的同義詞。??
WEEK?????????????????????返回參數(shù)中一年的第幾周,用范圍在?1-54?的整數(shù)值表示。以星期日作為一周的開始。??
WEEK_ISO????????????返回參數(shù)中一年的第幾周,用范圍在?1-53?的整數(shù)值表示。
要使當(dāng)前時(shí)間或當(dāng)前時(shí)間戳記調(diào)整到?GMT/CUT,則把當(dāng)前的時(shí)間或時(shí)間戳記減去當(dāng)前時(shí)區(qū)寄存器:?
current?time?-?current?timezone?
current?timestamp?-?current?timezone?
給定了日期、時(shí)間或時(shí)間戳記,則使用適當(dāng)?shù)暮瘮?shù)可以單獨(dú)抽取出(如果適用的話)年、月、日、時(shí)、分、秒及微秒各部分:?
YEAR?(current?timestamp)?
MONTH?(current?timestamp)?
DAY?(current?timestamp)?
HOUR?(current?timestamp)?
MINUTE?(current?timestamp)?
SECOND?(current?timestamp)?
MICROSECOND?(current?timestamp)?
因?yàn)闆](méi)有更好的術(shù)語(yǔ),所以您還可以使用英語(yǔ)來(lái)執(zhí)行日期和時(shí)間計(jì)算:?
current?date?+?1?YEAR?
current?date?+?3?YEARS?+?2?MONTHS?+?15?DAYS?
current?time?+?5?HOURS?-?3?MINUTES?+?10?SECONDS?
從時(shí)間戳記單獨(dú)抽取出日期和時(shí)間也非常簡(jiǎn)單:?
DATE?(current?timestamp)?
TIME?(current?timestamp)
而以下示例描述了如何獲得微秒部分歸零的當(dāng)前時(shí)間戳記:?
CURRENT?TIMESTAMP?-?MICROSECOND?(current?timestamp)?MICROSECONDS?
如果想將日期或時(shí)間值與其它文本相銜接,那么需要先將該值轉(zhuǎn)換成字符串。為此,只要使用?CHAR()?函數(shù):?
char(current?date)?
char(current?time)?
char(current?date?+?12?hours)?
要將字符串轉(zhuǎn)換成日期或時(shí)間值,可以使用:?
TIMESTAMP?('2002-10-20-12.00.00.000000')?
TIMESTAMP?('2002-10-20?12:00:00')?
DATE?('2002-10-20')?
DATE?('10/20/2002')?
TIME?('12:00:00')?
TIME?('12.00.00')?
TIMESTAMP()、DATE()?和?TIME()?函數(shù)接受更多種格式。上面幾種格式只是示例,我將把它作為一個(gè)練習(xí),讓讀者自己去發(fā)現(xiàn)其它格式。?
有時(shí),您需要知道兩個(gè)時(shí)間戳記之間的時(shí)差。為此,DB2?提供了一個(gè)名為?TIMESTAMPDIFF()?的內(nèi)置函數(shù)。但該函數(shù)返回的是近似值,因?yàn)樗豢紤]閏年,而且假設(shè)每個(gè)月只有?30?天。以下示例描述了如何得到兩個(gè)日期的近似時(shí)差:?
timestampdiff?(<n>,?char(?
timestamp('2002-11-30-00.00.00')-?
timestamp('2002-11-08-00.00.00')))?
對(duì)于?<n>,可以使用以下各值來(lái)替代,以指出結(jié)果的時(shí)間單位:?
1?=?秒的小數(shù)部分??
2?=?秒??
4?=?分??
8?=?時(shí)??
16?=?天??
32?=?周??
64?=?月??
128?=?季度??
256?=?年??
當(dāng)日期很接近時(shí)使用?timestampdiff()?比日期相差很大時(shí)精確。如果需要進(jìn)行更精確的計(jì)算,可以使用以下方法來(lái)確定時(shí)差(按秒計(jì)):?
(DAYS(t1)?-?DAYS(t2))?*?86400?+???
(MIDNIGHT_SECONDS(t1)?-?MIDNIGHT_SECONDS(t2))?
為方便起見,還可以對(duì)上面的方法創(chuàng)建?SQL?用戶定義的函數(shù):?
CREATE?FUNCTION?secondsdiff(t1?TIMESTAMP,?t2?TIMESTAMP)?
RETURNS?INT?
RETURN?(?
(DAYS(t1)?-?DAYS(t2))?*?86400?+???
(MIDNIGHT_SECONDS(t1)?-?MIDNIGHT_SECONDS(t2))?
)?
@?
如果需要確定給定年份是否是閏年,以下是一個(gè)很有用的?SQL?函數(shù),您可以創(chuàng)建它來(lái)確定給定年份的天數(shù):?
CREATE?FUNCTION?daysinyear(yr?INT)?
RETURNS?INT?
RETURN?(CASE?(mod(yr,?400))?WHEN?0?THEN?366?ELSE??
????????CASE?(mod(yr,?4))???WHEN?0?THEN??
????????CASE?(mod(yr,?100))?WHEN?0?THEN?365?ELSE?366?END??
????????ELSE?365?END?
END)@?
最后,以下是一張用于日期操作的內(nèi)置函數(shù)表。它旨在幫助您快速確定可能滿足您要求的函數(shù),但未提供完整的參考。有關(guān)這些函數(shù)的更多信息,請(qǐng)參考?SQL?參考大全。?
SQL?日期和時(shí)間函數(shù)??
DAYNAME?返回一個(gè)大小寫混合的字符串,對(duì)于參數(shù)的日部分,用星期表示這一天的名稱(例如,F(xiàn)riday)。??
DAYOFWEEK?返回參數(shù)中的星期幾,用范圍在?1-7?的整數(shù)值表示,其中?1?代表星期日。??
DAYOFWEEK_ISO?返回參數(shù)中的星期幾,用范圍在?1-7?的整數(shù)值表示,其中?1?代表星期一。??
DAYOFYEAR?返回參數(shù)中一年中的第幾天,用范圍在?1-366?的整數(shù)值表示。??
DAYS?返回日期的整數(shù)表示。??
JULIAN_DAY?返回從公元前?4712?年?1?月?1?日(儒略日歷的開始日期)到參數(shù)中指定日期值之間的天數(shù),用整數(shù)值表示。??
MIDNIGHT_SECONDS?返回午夜和參數(shù)中指定的時(shí)間值之間的秒數(shù),用范圍在?0?到?86400?之間的整數(shù)值表示。??
MONTHNAME?對(duì)于參數(shù)的月部分的月份,返回一個(gè)大小寫混合的字符串(例如,January)。??
TIMESTAMP_ISO?根據(jù)日期、時(shí)間或時(shí)間戳記參數(shù)而返回一個(gè)時(shí)間戳記值。??
TIMESTAMP_FORMAT?從已使用字符模板解釋的字符串返回時(shí)間戳記。??
TIMESTAMPDIFF?根據(jù)兩個(gè)時(shí)間戳記之間的時(shí)差,返回由第一個(gè)參數(shù)定義的類型表示的估計(jì)時(shí)差。??
TO_CHAR?返回已用字符模板進(jìn)行格式化的時(shí)間戳記的字符表示。TO_CHAR?是?VARCHAR_FORMAT?的同義詞。??
TO_DATE?從已使用字符模板解釋過(guò)的字符串返回時(shí)間戳記。TO_DATE?是?TIMESTAMP_FORMAT?的同義詞。??
WEEK?返回參數(shù)中一年的第幾周,用范圍在?1-54?的整數(shù)值表示。以星期日作為一周的開始。??
挺身而上??
主唱:秦勇
演奏:北京青年演奏家交響樂(lè)團(tuán)
音樂(lè)錄音:馬丁(小)
從來(lái)不甘心,平平常常
卻為什么苦守在這個(gè)地方
有時(shí)也想想,過(guò)得怎樣
面對(duì)著所有人我坦坦蕩蕩
青春與你共享
苦惱先放一放
危難中發(fā)出力量
就是現(xiàn)在,就是我們,挺身而上
親愛(ài)的戰(zhàn)友你在何方
心中多少話兒要對(duì)你講
我還是相信地久天長(zhǎng)
風(fēng)雨路上有你和我一起前往
男兒絕不退讓
做一回生死較量
重任由誰(shuí)來(lái)?yè)?dān)當(dāng)
就是現(xiàn)在就是我們挺身而上
男兒絕不退讓
做一回生死較量
重任由誰(shuí)來(lái)?yè)?dān)當(dāng)
就是現(xiàn)在就是我們挺身而上
男兒絕不退讓
做一回生死較量
重任由誰(shuí)來(lái)?yè)?dān)當(dāng)
就是現(xiàn)在就是我們挺身而上
今日在網(wǎng)上閑逛,偶得一文章,感覺(jué)很不錯(cuò)。對(duì)正在工作中的年輕人很有幫助,現(xiàn)發(fā)表在此。
給年輕工程師的十大忠告
諸位,咱當(dāng)電子工程師也是十余年了,不算有出息,環(huán)顧四周,也沒(méi)有看見幾個(gè)有出息的!回顧工程師生涯,感慨萬(wàn)千,愿意講幾句掏心窩子的話,也算給咱們師弟師妹們提個(gè)醒,希望他們比咱們強(qiáng)!
[1]好好規(guī)劃自己的路,不要跟著感覺(jué)走!根據(jù)個(gè)人的理想決策安排,絕大部分人并不指望成為什么院士或教授,而是希望活得滋潤(rùn)一些,爽一些。那么,就需要慎重安排自己的軌跡。從哪個(gè)行業(yè)入手,逐漸對(duì)該行業(yè)深入了解,不要頻繁跳槽,特別是不要為了一點(diǎn)工資而轉(zhuǎn)移陣地,從長(zhǎng)遠(yuǎn)看,這點(diǎn)錢根本不算什么,當(dāng)你對(duì)一個(gè)行業(yè)有那么幾年的體會(huì),以后錢根本不是問(wèn)題。頻繁地動(dòng)蕩不是上策,最后你對(duì)哪個(gè)行業(yè)都沒(méi)有摸透,永遠(yuǎn)是新手!
[2]可以做技術(shù),切不可沉湎于技術(shù)。千萬(wàn)不可一門心思鉆研技術(shù)!給自己很大壓力,如果你的心思全部放在這上面,那么注定你將成為孔乙己一類的人物!適可而止為之,因?yàn)榧夹g(shù)只不過(guò)是你今后前途的支柱之一,而且還不是最大的支柱,除非你只愿意到老還是個(gè)工程師!
[3]不要去做技術(shù)高手,只去做綜合素質(zhì)高手!在企業(yè)里混,我們時(shí)常瞧不起某人,說(shuō)他“什么都不懂,憑啥拿那么多錢,憑啥升官!”這是普遍的典型的工程師的迂腐之言。8051很牛嗎?人家能上去必然有他的本事,而且是你沒(méi)有的本事。你想想,老板搞經(jīng)營(yíng)那么多年,難道見識(shí)不如你這個(gè)新兵?人家或許善于管理,善于領(lǐng)會(huì)老板意圖,善于部門協(xié)調(diào)等等。因此務(wù)必培養(yǎng)自己多方面的能力,包括管理,親和力,察言觀色能力,攻關(guān)能力等,要成為綜合素質(zhì)的高手,則前途無(wú)量,否則只能躲在角落看示波器!技術(shù)以外的技能才是更重要的本事!!從古到今,美國(guó)日本,一律如此!
[4]多交社會(huì)三教九流的朋友!不要只和工程師交往,認(rèn)為有共同語(yǔ)言,其實(shí)更重要的是和其他類人物交往,如果你希望有朝一日當(dāng)老板或高層管理,那么你整日面對(duì)的就是這些人。了解他們的經(jīng)歷,思維習(xí)慣,愛(ài)好,學(xué)習(xí)他們處理問(wèn)題的模式,了解社會(huì)各個(gè)角落的現(xiàn)象和問(wèn)題,這是以后發(fā)展的巨大的本錢,沒(méi)有這些以后就會(huì)笨手笨腳,跌跌撞撞,遇到重重困難,交不少學(xué)費(fèi),成功的概率大大降低!
[5]知識(shí)涉獵不一定專,但一定要廣!多看看其他方面的書,金融,財(cái)會(huì),進(jìn)出口,稅務(wù),法律等等,為以后做一些積累,以后的用處會(huì)更大!會(huì)少交許多學(xué)費(fèi)!!
[6]抓住時(shí)機(jī)向技術(shù)管理或市場(chǎng)銷售方面的轉(zhuǎn)變!要想有前途就不能一直搞開發(fā),適當(dāng)時(shí)候要轉(zhuǎn)變?yōu)楣芾砘蜾N售,前途會(huì)更大,以前搞技術(shù)也沒(méi)有白搞,以后還用得著。搞管理可以培養(yǎng)自己的領(lǐng)導(dǎo)能力,搞銷售可以培養(yǎng)自己的市場(chǎng)概念和思維,同時(shí)為自己以后發(fā)展積累龐大的人脈!應(yīng)該說(shuō)這才是前途的真正支柱!!!
[7]逐漸克服自己的心里弱點(diǎn)和性格缺陷!多疑,敏感,天真(貶義,并不可愛(ài)),猶豫不決,膽怯,多慮,臉皮太薄,盡管你可能技術(shù)不錯(cuò)!
[8]工作的同時(shí)要為以后做準(zhǔn)備!建立自己的工作環(huán)境!及早為自己配置一個(gè)工作環(huán)境,裝備電腦,示波器(可以買個(gè)二手的),仿真器,編程器等,業(yè)余可以接點(diǎn)活,一方面接觸市場(chǎng),培養(yǎng)市場(chǎng)感覺(jué),同時(shí)也積累資金,更重要的是準(zhǔn)備自己的產(chǎn)品,咱搞技術(shù)的沒(méi)有錢,只有技術(shù),技術(shù)的代表不是學(xué)歷和證書,而是產(chǎn)品,拿出象樣的產(chǎn)品,就可技術(shù)轉(zhuǎn)讓或與人合作搞企業(yè)!先把東西準(zhǔn)備好,等待機(jī)會(huì),否則,有了機(jī)會(huì)也抓不住!
[9]要學(xué)會(huì)善于推銷自己!不僅要能干,還要能說(shuō),能寫,善于利用一切機(jī)會(huì)推銷自己,樹立自己的品牌形象,很必要!要?jiǎng)?chuàng)造條件讓別人了解自己,不然老板怎么知道你能干?外面的投資人怎么相信你?提早把自己推銷出去,機(jī)會(huì)自然會(huì)來(lái)找你!搞個(gè)個(gè)人主頁(yè)是個(gè)好注意!!特別是培養(yǎng)自己在行業(yè)的名氣,有了名氣,高薪機(jī)會(huì)自不在話下,更重要的是有合作的機(jī)會(huì)...
[10]該出手時(shí)便出手!永遠(yuǎn)不可能有100%把握!!!條件差不多就要大膽去干,去闖出自己的事業(yè),不要猶豫,不要彷徨,干了不一定成功,但至少為下一次沖擊積累了經(jīng)驗(yàn),不干永遠(yuǎn)沒(méi)出息,而且要干成必然要經(jīng)歷失敗。不經(jīng)歷風(fēng)雨,怎么見彩虹,沒(méi)有人能隨隨便便成功!
我很長(zhǎng)一段時(shí)間都在煎熬中度過(guò),已經(jīng)快到而立之年,對(duì)自己的發(fā)展方向、前途卻還很迷茫。這么多年來(lái),我一直受興趣指引,走了很長(zhǎng)的路,或曲或直,但我從來(lái)沒(méi)有后悔過(guò)。可決定未來(lái)的方向卻讓我痛苦不已。
1987年,我開始在CONMAX(記得不是很清楚了)機(jī)器上學(xué)習(xí)BASIC,從此和程序語(yǔ)言結(jié)下了不解之緣。當(dāng)時(shí)學(xué)校僅有兩臺(tái)蘋果II型電腦,我們連碰的機(jī)會(huì)都沒(méi)有。CONMAX機(jī)器開機(jī)就是BASIC,沒(méi)有操作系統(tǒng),沒(méi)有磁盤(使用錄音機(jī)記錄程序),在這樣的機(jī)器上,我和我的同學(xué)們用SHAPE命令編程序在屏幕上寫自己的名字,寫賽車游戲、碰碰球游戲。編程給我?guī)?lái)了無(wú)窮的樂(lè)趣。
93年考入大學(xué),因?yàn)楫?dāng)時(shí)外貿(mào)非常熱門,我放棄了感興趣的自動(dòng)化專業(yè)、機(jī)械專業(yè),開始學(xué)習(xí)工業(yè)外貿(mào)。由于是工業(yè)外貿(mào),所以在課程設(shè)置上包含了機(jī)械、電子、經(jīng)濟(jì)、英語(yǔ)、外貿(mào)等方向的多門課程。憑著自己的興趣,在機(jī)械相關(guān)的課程上,我的平均成績(jī)不在97分之下(畫法幾何還考了100分)。這也奠定了后來(lái)學(xué)習(xí)Auto CAD、3DS MAX的基礎(chǔ)。電子類課程成績(jī)也不錯(cuò),基本上都是班中第一。我對(duì)外語(yǔ)和外貿(mào)并不是很感興趣,但在周圍同學(xué)的強(qiáng)大壓力下,還是以73.5分的成績(jī)通過(guò)了六級(jí)考試,并在全院第一個(gè)拿到了BEC2的證書,更沒(méi)想到的是5年后我竟然成為了BEC的口語(yǔ)考官。
大學(xué)的生活非常緊張,除了在學(xué)生會(huì)任職之外,我還把學(xué)校中所有的計(jì)算機(jī)培訓(xùn)班課程學(xué)了一個(gè)遍,在這期間我接觸了PASCAL、C語(yǔ)言、FoxBASE、FoxPro,也為我參加數(shù)學(xué)建模競(jìng)賽奠定了計(jì)算機(jī)基礎(chǔ)。1995年,學(xué)校組隊(duì)參加全國(guó)大學(xué)生數(shù)學(xué)建模競(jìng)賽,我沒(méi)有被選中。在強(qiáng)烈要求下,我作為旁聽生參加了近一年半的數(shù)學(xué)建模的培訓(xùn)。雖經(jīng)過(guò)艱苦的準(zhǔn)備,但最終由于一個(gè)小失誤導(dǎo)致我們組在全國(guó)大學(xué)生數(shù)學(xué)建模競(jìng)賽上只拿到了河北省二等獎(jiǎng)。為了挽回失去的榮譽(yù),我放棄了考研,毅然決定與隊(duì)友參加美國(guó)大學(xué)生數(shù)學(xué)建模競(jìng)賽,并最終取得了一等獎(jiǎng)的好成績(jī)。可笑的是,在參賽獲獎(jiǎng)的兩組六個(gè)人中,竟然有三個(gè)人是當(dāng)時(shí)的“旁聽生”。
雖然外貿(mào)專業(yè)課沒(méi)有學(xué)好,但大學(xué)的學(xué)習(xí)為我的英語(yǔ)、數(shù)學(xué)、計(jì)算機(jī)打下了很好的基礎(chǔ),這也是我的興趣帶我到這一步的。畢業(yè)后留校,并轉(zhuǎn)行管理信息系統(tǒng)。比起管理信息系統(tǒng)專業(yè)的學(xué)生來(lái),我欠缺了太多的知識(shí)。我把“計(jì)算機(jī)技術(shù)”作為我的專攻方向,不斷追趕。VFP、VB、DELPHI、.NET、SQL Server……甚至成為了MCT,在計(jì)算機(jī)技術(shù)上走了很遠(yuǎn)。
現(xiàn)在,我忽然發(fā)現(xiàn)“累”了。我發(fā)現(xiàn)我對(duì)編程、對(duì)計(jì)算機(jī)技術(shù)不象以前那么專注了。我更加感興趣技術(shù)后面的東西:設(shè)計(jì)模式、分析模式、財(cái)務(wù)管理、營(yíng)銷策略、企業(yè)信息化……想起當(dāng)時(shí)我的老師說(shuō)管理信息系統(tǒng)是“數(shù)學(xué)”、“管理”、“計(jì)算機(jī)”的交叉地帶,我現(xiàn)在花了7年的時(shí)間才明白“技術(shù)”不能代表一切。
很多象我一樣對(duì)計(jì)算機(jī)技術(shù)“狂熱”的人,其中一個(gè)原因恐怕是“編程”容易上手,花上個(gè)把月的時(shí)間就可以學(xué)到一些“高深”東西,并且可以編程炫耀一番了。另外,編程是創(chuàng)造的過(guò)程,看著自己的想法付諸實(shí)現(xiàn),總會(huì)有成就之感,即使程序編寫的很糟糕。編程也能處處體現(xiàn)征服困難的喜悅,每當(dāng)一個(gè)問(wèn)題被解決,心里面總有一種成就感,即使這個(gè)問(wèn)題早就有人解決過(guò)了。這也是為什么有人花上大量時(shí)間,用盡各種技巧用JavaScript編寫一個(gè)Web控件,而根本不去琢磨是否有一種智能客戶端的技術(shù),可以使用功能豐富的Windows控件。
編程中的這種體會(huì)引導(dǎo)著我的興趣,讓我走了很遠(yuǎn),也失去了很多。“專注于計(jì)算機(jī)技術(shù)”讓很多人放棄了外語(yǔ)、放棄了數(shù)學(xué)、放棄了管理。很多人說(shuō)這種放棄是心甘情愿的,你可能花了兩年的時(shí)間學(xué)習(xí)英語(yǔ),然而收獲很少,為什么不去學(xué)計(jì)算機(jī)呢,至少能夠“速成”,而且喜悅伴隨著整個(gè)的學(xué)習(xí)過(guò)程。可是,這錯(cuò)了。編程創(chuàng)造的價(jià)值是什么呢?當(dāng)你開發(fā)一套系統(tǒng)的時(shí)候,這套系統(tǒng)的管理內(nèi)涵決定了應(yīng)用信息系統(tǒng)的價(jià)值,而不是編程技巧的高低。編程技巧的高低可以決定開發(fā)效率,但不能決定企業(yè)應(yīng)用信息系統(tǒng)究竟能帶來(lái)多大的收益。編程是一種機(jī)械性的工作,它里面的創(chuàng)新并不能象優(yōu)化管理流程一樣對(duì)企業(yè)帶來(lái)的巨大的利潤(rùn)。Web Service技術(shù)也不是憑空出現(xiàn)的,而是應(yīng)企業(yè)應(yīng)用集成的需求而出現(xiàn)的。
現(xiàn)在的編程技術(shù)也降低了編程的門檻(很多人的虛榮心可以更容易的實(shí)現(xiàn)了),寒楓天傷有一次推薦自動(dòng)代碼生成的一系列網(wǎng)站,我看了一些,其中“Constructor”軟件讓程序編寫.net系統(tǒng)變的如此容易。應(yīng)用MDA后恐怕更容易。也許有一天人們不用再寫那么多的代碼。程序開發(fā)員的價(jià)值是否也意味著會(huì)不斷貶值呢?
“開發(fā)”陣營(yíng)的人往往感慨為什么中國(guó)程序員沒(méi)有超過(guò)30的,為什么中國(guó)沒(méi)有人能夠創(chuàng)造出一門語(yǔ)言來(lái)。不再專注于技術(shù)不意味著放棄技術(shù)。過(guò)分專注技術(shù),就會(huì)陷入一種“技術(shù)成功”做成的陷阱中,最終變成一個(gè)“快樂(lè)的井底之蛙”。另外,只有知道技術(shù)的發(fā)展方向,才能更好的專注于技術(shù),而技術(shù)的發(fā)展方向往往不取決于技術(shù)本身。設(shè)想有一天,一個(gè)跨國(guó)公司經(jīng)營(yíng)的幾千萬(wàn)種商品一小時(shí)內(nèi)完成清點(diǎn),配貨,及時(shí)針對(duì)競(jìng)爭(zhēng)對(duì)手作出決策,所有這一切都是技術(shù)本身的功勞嗎?我想不全是,其中一大部分取決于管理。用過(guò)ERP產(chǎn)品的程序員都說(shuō),其實(shí)每個(gè)界面都很簡(jiǎn)單,但ERP的價(jià)值不在于編程是否簡(jiǎn)單,其最重要的價(jià)值就是理順的管理流程,推動(dòng)了企業(yè)的運(yùn)轉(zhuǎn)。
我跟著興趣走得太遠(yuǎn)了,而且這個(gè)“興趣”實(shí)際上是“過(guò)分關(guān)注編程技術(shù)”帶來(lái)的小恩小惠積累起來(lái)的,它讓我走了條彎路(但我不后悔)。現(xiàn)在這個(gè)問(wèn)題困擾了我太久了,我實(shí)在是很難割舍這些“小恩小惠”,可我還要割舍掉。我曾經(jīng)放棄過(guò)自動(dòng)化、機(jī)械選擇了工業(yè)外貿(mào),也曾經(jīng)放棄了考研選擇了參加美國(guó)大學(xué)生數(shù)學(xué)建模競(jìng)賽,還曾經(jīng)放棄了我的大學(xué)專業(yè)工業(yè)外貿(mào)轉(zhuǎn)行管理信息系統(tǒng),現(xiàn)在我也要放棄“專注于技術(shù)”,將更多的精力專注在管理、財(cái)務(wù)、企業(yè)信息化上面。我不放棄技術(shù),也會(huì)繼續(xù)在博客園發(fā)表技術(shù)文章,只是不想再專注于技術(shù)這一方面了。