第一篇:DB2常用函數總結
一、字符轉換函數
1、ASCII()
返回字符表達式最左端字符的ASCII 碼值。在ASCII()函數中,純數字的字符串可不用??括起來,但含其它字符的字符串必須用??括起來使用,否則會出錯。
2、CHAR()
將ASCII 碼轉換為字符。如果沒有輸入0 ~ 255 之間的ASCII 碼值,CHAR()返回NULL。
3、LOWER()和UPPER()
LOWER()將字符串全部轉為小寫;UPPER()將字符串全部轉為大寫。
4、STR()
把數值型數據轉換為字符型數據。
STR(
length 指定返回的字符串的長度,decimal 指定返回的小數位數。如果沒有指定長度,缺省的length 值為10,decimal 缺省值為0。
當length 或者decimal 為負值時,返回NULL;
當length 小于小數點左邊(包括符號位)的位數時,返回length 個*;
先服從length,再取decimal ;
當返回的字符串位數小于length,左邊補足空格。
二、去空格函數
1、LTRIM()把字符串頭部的空格去掉。
2、RTRIM()把字符串尾部的空格去掉。
三、取子串函數
1、left()
LEFT(
2、RIGHT()
RIGHT(
3、SUBSTRING()
SUBSTRING(
返回從字符串左邊第starting_ position 個字符起length個字符的部分。
四、字符串比較函數
1、CHARINDEX()
返回字符串中某個指定的子串出現的開始位置。
CHARINDEX(,
其中substring _expression 是所要查找的字符表達式,expression 可為字符串也可為列名表達式。如果沒有發現子串,則返回0 值。
此函數不能用于TEXT 和IMAGE 數據類型。
2、PATINDEX()
返回字符串中某個指定的子串出現的開始位置。
PATINDEX(%substring _expression%?>,
與CHARINDEX 函數不同的是,PATINDEX函數的子串中可以使用通配符,且此函數可用于CHAR、VARCHAR 和TEXT 數據類型。
五、字符串操作函數
1、QUOTENAME()
返回被特定字符括起來的字符串。
QUOTENAME([,quote_ character])其中quote_ character 標明括字符串所用的字符,缺省值為“[]”。
2、REPLICATE()
返回一個重復character_expression 指定次數的字符串。
REPLICATE(character_expression integer_expression)如果integer_expression 值為負值,則返回NULL。
3、REVERSE()
將指定的字符串的字符排列順序顛倒。
REVERSE(
4、REPLACE()
返回被替換了指定子串的字符串。
REPLACE(
4、SPACE()
返回一個有指定長度的空白字符串。
SPACE(
5、STUFF()
用另一子串替換字符串指定位置、長度的子串。
STUFF(
如果起始位置為負或長度值為負,或者起始位置大于character_expression1 的長度,則返回NULL 值。
如果length 長度大于character_expression1 中 start_ position 以右的長度,則character_expression1 只保留首字符。
六、數據類型轉換函數
1、CAST()
CAST(
2、CONVERT()
CONVERT(
1)data_type為SQL Server系統定義的數據類型,用戶自定義的數據類型不能在此使用。
2)length用于指定數據的長度,缺省值為30。
3)把CHAR或VARCHAR類型轉換為諸如INT或SAMLLINT這樣的INTEGER類型、結果必須是帶正號或負號的數值。
4)TEXT類型到CHAR或VARCHAR類型轉換最多為8000個字符,即CHAR或VARCHAR數據類型是最大長度。
5)IMAGE類型存儲的數據轉換到BINARY或VARBINARY類型,最多為8000個字符。
6)把整數值轉換為MONEY或SMALLMONEY類型,按定義的國家的貨幣單位來處理,如人民幣、美元、英鎊等。
7)BIT類型的轉換把非零值轉換為1,并仍以BIT類型存儲。
8)試圖轉換到不同長度的數據類型,會截短轉換值并在轉換值后顯示“+”,以標識發生了這種截斷。
9)用CONVERT()函數的style 選項能以不同的格式顯示日期和時間。style 是將DATATIME 和SMALLDATETIME 數據轉換為字符串時所選用的由SQL Server 系統提供的轉換樣式編號,不同的樣式編號有不同的輸出格式。
七、日期函數
1、day(date_expression)返回date_expression中的日期值
2、month(date_expression)返回date_expression中的月份值
3、year(date_expression)返回date_expression中的年份值
4、DATEADD()
DATEADD(
返回指定日期date 加上指定的額外日期間隔number 產生的新日期。
5、DATEDIFF()
DATEDIFF(
返回兩個指定日期在datepart 方面的不同之處,即date2 超過date1的差距值,其結果值是一個帶有正負號的整數值。
6、DATENAME()
DATENAME(
以字符串的形式返回日期的指定部分此部分。由datepart 來指定。
7、DATEPART()
DATEPART(
以整數值的形式返回日期的指定部分。此部分由datepart 來指定。
DATEPART(dd,date)等同于DAY(date)DATEPART(mm,date)等同于MONTH(date)DATEPART(yy,date)等同于YEAR(date)
8、GETDATE()
以DATETIME 的缺省格式返回系統當前的日期和時間
第二篇:db2學習總結
一、SQL部分:
1、連接字符串的方式:’||’運算符、concat函數
2、在db2中字符串使用單引號括起來,表示單引號本身:’’(兩個單引號)
3、利用chr()可以將ASCII碼轉化為字符,ch(10)表示換行,ch(13)表示換行
4、Insert語句有三種格式:一次插入一行,一次插入多行,從select語句中插入
1)insert into table_name(col1,col2,......)values(val1,val2,val3,......);
2)Insert into table_name(col1,col2,......)values(val1,val2,......),(val1,val2,.....),(val1,val2.....),.....;
3)insert into table_name(col1,col2,.....)select col1,col2,......From table_name......;
一次插入多行的格式性能高于一次插入一行,利用多條語句插入的格式,因為一條語句是一個處理單元。
5、update語句有兩種格式:
1)update table_name set col_name=’ ****’ where.......2)Update(select ****from table_name)set col_name=’****’ where.....第二種方式可讀性沒有第一種方式好,但是它可以處理第一種方式處理不了的情況。
6、刪除數據:
1)delete from table_name where......;
2)delete from(select * fromtable_name where......);
3)Delete from table_name;(刪除全部數據);
4)先drop table,再create table,處理速度很快,但是比較麻煩
5)Alter table table_name active not logged initially with empty table;該語句對表的操作不記錄日志,恢復的時候可能會有問題
7、子查詢
1)相關子查詢:相關子查詢的子句依賴外部語句的條件,不能單獨執行
2)非相關子查詢:非相關子查詢的子句是可以單獨執行的。
相關子查詢的性能和可讀性都不如非相關子查詢。
8、多字段查詢
1)select * from table_name where col1=’ ’ and col2=’’;
2)Select * from table_name where(col1,col2)=(‘’ ,’’);
3)Select * from table_name where(col1,col2)in(子查詢);
4)Update table_name set(col1,col2)=(子查詢)where.......9、order by 子句,用于對結果集進行排序,為避免出現邏輯錯誤,應在該子句中加入主鍵或唯一鍵。
10、Group by 語句:對記錄進行分組
1)與rollup一起使用:
Group by rollup(col1,col2),其中col1與col2的順序十分重要,若將兩者交換,會得到不同的結果
2)與cube一起使用:Group by cube(col1,col2),col1與col2的順序可以任意調換,結果不變。
11、some、any、all、exists、in
Some和any作用完全相同
二、Db2與oracle的區別
1、數據類型不一樣
2、轉換函數不一樣
3、
第三篇:DB2性能調節工作總結(推薦)
DB2性能調節工作總結
近期負責了Metric項目的服務器性能維護,對DB2的性能調節做了些研究。整體感覺數據庫調優的關鍵點應該還是在建庫階段,好的查詢更能得到更好的性能。而后期對數據庫參數等的調節結果并不是非常明顯的。
網上數據庫調節方面的資料也很多,但大多數都是轉來轉去的,在此只做下我個人的工作總結;(//表示對上訴解釋 ##表示對下面解釋)
#####1,Monitoring
#### db2 get database manager monitor switches //顯示監視開關的情況
db2 update dbm cfg using DFT_MON_BUFPOOL ON DFT_MON_LOCK ON db2 update dbm cfg using DFT_MON_SORT ON DFT_MON_STMT ON db2 update dbm cfg using DFT_MON_TABLE ON DFT_MON_UOS ON db2 terminate db2stop db2start //在實例級打開監視開關,這樣隨著實例的重啟,開關生效 db2 get database manager monitor switches db2 get monitor switches //發現實例級和下面的數據庫監視開關都打開了 db2 deacivate database tp1 db2 activate database tp1 //重新激活數據庫,刷新監視數據 select agent_id,rows_read,rows_written,rows_selected,rows_inserted from sysibmadm.snapappl //監視每個代理讀寫查詢的情況,如果read的數量遠高于select的數量,考慮是不是缺少索引
//在我的工作中,很少遇到寫多的情況,所以對這方面也沒深入
db2 get snapshot for tables on tp1 > sntab1.txt //接下來監視tp1數據庫下所有表的讀寫啦
##下一步,就是抓到那個有大量讀大于寫的表,然后提取該表上的查詢SQL ##這里就要考慮兩種情況了,是靜態的還是動態的 ##@@@靜態的,從包里提取 db2bfd-s sqltp1st.bnd ##@@@動態的,可以用snapshot SQL STATEMENT抓取,這里不寫了 //然后就要提取出我們關注的大量讀的查詢SQL //我不太喜歡這部,累眼睛,還煩瑣!!如果有大量查詢SQL,還需要想辦法自己找出
db2 describe indexes for table acct show detail //然后就是從提出的SQL中找到表,從表中看有沒有索引,沒有的話,新建
##之后呢,就可以從訪問計劃中看索引有沒有生效 ##靜態SQL可以用db2expln從包里弄,本人比較喜歡db2exfmt,因為動靜SQL都可以弄
##后面有db2exfmt關于動靜的例子,我比較習慣把SQL statement拿出來
##然后放進文本里,db2expln-d GTSSTGMS-f SQL.txt-g-z;-o GTSSTGMS_sort.txt ##或者,db2 connect to tp1 ##db2 set current explain mode explain ##db2 set current explain snapshot explain ##db2 “select name,address from acct where......” ##db2exfmt-l-d tp1-o extp2.txt => vi extp2.txt
#####2,Talespace and I/O Performance
#### db2 select bpname,bufferpoolid,npages,pagesize from syscat.bufferpools //查看數據庫的緩沖池,syscat.bufferpools中的bufferpoolid字段和sysibmadm.snapdb_memory_pool //的pool_secondary_id是關聯的,從后一張表中記載著用戶用戶間的緩沖池和系統自建的緩沖池
//CURRENT_SIZE 當前大小;POOL_CONFIG_SIZE 設置大小;HIGH_WATERMARK 最高記錄;//我發現,這和使用 db2pd-db GTSSTGMS-mempools是對應的 PhySz PhyUpBnd PhyHWM //使用
db2pd-db GTSSTGMS-memset,將同類內存集合并計算
//在這里插一段緩沖池自調節功能介紹
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 下面我們創建示例緩沖池MYBP1,其使用自調整功能(注意其create bufferpool語句使用了automatic),初始大小為400K,具體如清單4所示:
創建使用自動自調整功能的示例緩沖池MYBP1 db2 create bufferpool mybp1 immediate size 100 automatic pagesize 4k db2 “select BPNAME, NPAGES from sysibm.sysbufferpools” 當緩沖池啟用了自調整功能時,該特定緩沖池的
sysibm.sysbufferpools 表中的 NPAGES 字段將設置為-2。當自調整功能處于禁用狀態時,NPAGES 字段將設置為緩沖池的當前大小。
db2 alter bufferpool mybp2 immediate size 100 automatic 表空間在讀大數據的時候,給表空間指定緩沖區是沒有用的。這種情況下,DB2會利用直接I/O去接觸大數據。db2 create bufferpool BP8K size 1000 pagesize 8k db2 create system temporary tablespace TMP8K pagesize 8k managed by system using('TMP8K')EXTENTSIZE 8 PREFETCHSIZE 8 bufferpool BP8K @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ###接下來呢,當然是看命中率了 當然可以用 db2 get snapshot for database on tp1 ###這里介紹另外一個方法 select data_physical_reads,index_physical_reads,total_physical_reads,bp_name from sysibmadm.bp_hitratio where bp_name not like 'IBMSYSTEM%' select data_logical_reads,index_logical_reads,total_logical_reads,bp_name from sysibmadm.bp_hitratio where bp_name not like 'IBMSYSTEM%' select data_hit_ratio_percent,index_hit_ratio_percent,total_hit_ratio_percent,bp_name from sysibmadm.bp_hitratio where bp_name not like 'IBMSYSTEM%' //上面這樣可以檢測每一個緩沖器的命中率情況 ###接下來,看一下緩沖器的讀寫情況 select substr(bp_name,1,15)as bp_name,total_physical_reads,average_read_time_ms from sysibmadm.bp_read_io where bp_name not like 'IBMSYSTEM%' select substr(bp_name,1,15)as bp_name, total_write,average_write_time_ms from sysibmadm.bp_write_io where bp_name not like 'IBMSYSTEM%' //那個bufferpool比較忙,用于那個表空間,該表空間有哪些表,檢查。。###下面檢查表空間
select pool_data_p_reads as Total_Data_Reads, Pool_async_data_reads as Asynch_Data_Reads, pool_async_read_time from sysibmadm.snapbp where bp_name='IBMDEFAULTBP' select pool_async_data_read_reqs as Data_Prefetch_Requests, decimal(POOL_ASYNC_DATA_READS)/decimal(POOL_ASYNC_DATA_READ_REQS)as Data_Page_Per_Prefetch, pages_from_block_ios from sysibmadm.snapbp where bp_name='IBMDEFAULTBP' ###其中DATA_PAGES_PER_PREFETCH要match上extent size,為了得到extent size,###(最好打開Automatic Prefetch size,這樣自動計算數值NUM of Containers * Extent Size)使用 db2 get snapshot for tablespace on tp1 ###最好將IOSERVERS和IOCLEANERS設為自動 db2 get db cfg show detail | grep NUM_IO NUM_IOSERVERS AUTOMATIC? NUM_IOCLEANERS AUTOMATIC?
#####3,Memory Management
#### ###當然是要看內存當前使用了 db2 deactivate db tp1 db2 activate db tp1 db2 connect to tp1 db2mtrk-d-v db2pd-db tp1-mempools db2pd-db tp1-memsets //這里就不多說了,好多我也不明白,明白的具體情況具體分析
#####4,Memory Management
#### db2 get snapshot for database on tp1 | grep-i sort //需要看一下total sorts和Sort Overflows的情況 //如果sort heap不夠用的話,會用臨時表空間 //可以snapshot一下這個臨時表空間
//特別注意Buffer pool temprorary data logical reads和Buffer pool temporary data physical reads //Buffer pool data writes,Asynchronous pool data page writes ###接下來就要估一下sortheap是否夠用 db2expln-d tp1-f sortquery.sql-g-z;-o expsort.txt ###這里主要看Rows * Row Width 和 sortheap大小
#####5,Access plan(Optimizer plan)
#### Monitor-----Static SQL cd $HOME/sqllib/bin db2 connect to tp1 db2 bind sqltp1st.bnd explain yes explsnap yes db2exfmt-l-d tp1-n SQLTP1ST-# /-o exptp1.txt sort heap size * 4K(PAGE)和 numrows*rowwidth(BYTE)比較大小,來決定sort heap size PCTFREE & FREEPAGE => 1)只讀表,如果對于一個表沒有任務更新活動,那么可以將定義為沒有空余空間,而且也沒有任何比較reorg,因為不會產生分頁。Monitor-----Dynamic SQL cd $HOME/sqllib/bin db2 connect to tp1 db2 set current explain mode explain db2 set current explain snapshot explain db2 “select name,address from acct.where acct_grp < 50 order by name” db2exfmt-l-d tp1-o extp2.txt
第四篇:簡單函數歸納總結
隨機取值:
1、randbetween(最小整數,最大整數)
2、rand()0~1 編輯組合,如:30~40,可編輯為:rand()*30+103、pi()3.14159........篩選值:
1、min(數值.....)取最小值
2、median(數值.....)取中值
3、max(數值.....)取最大值
4、small(數組,k)第k個最小值
5、Large(數組,k)第k個最大值
6、mode(數值)返回在區域中出現頻率最多的數
7、Mod(數值,除數)返回余數
求值:
1、求和 sum(數值1,........)
sumif(區域,條件,求和區域)
sumifs(求和區域,區域1,條件1,.......)
2、相乘 product(數值1,........)
3、平方和 sumsq(數值1,........)
4、平方根 sqrt(數值)
5、方差 var(數值1,........)
6、標準差 stdev(數值)
7、角度換算為弧度 randians(角度)
8、弧度換算為角度 degrees(弧度)
9、求平均值 average(數值)
10、求平均值 average(數值,區域1,條件1,........)
11、絕對值 abs(數值)
返回值:
1、trunc(數值,小數位數)將小數部分截去,返回整數
2、Round(數值,小數位數)按指定位數取整,遵循四舍五入
Roundup(數值,小數位數)向上按指定位數取整,不遵循四舍五入Rounddown(數值,小數位數)向下按指定位數取整,不遵循四舍五入
3、odd(數值)對指定數值沿絕對值增大方向取整后最接近的奇數
4、even(數值)對指定數值沿絕對值增大方向取整后最接近的偶數 排序:
1、rank(數值,引用,排位方式)“引用”使用“絕對引用”
第五篇:函數總結
常用函數
sum(數值1,數值2……)求和
average(數值1,數值2……)求平均值
max(數值1,數值2……)求最大值
min(數值1,數值2……)求最小值
count(數值1,數值2……)計數
注意:count只能統計數字的個數,對文本無效
rank(數值,數值所在列,0)排名次
注意:數值所在列要用F4鍵,鎖定
countif(統計的范圍,統計條件)有條件統計個數
round(數值,保留的小數位數)四舍五入
if(條件表達式,條件成立時返回的值,條件不成立時返回的值)注意:在office 2010中IF最多能夠嵌套64層
sumif(條件所在范圍,條件表達式,求和的區域)有條件求和 or(,,,……)邏輯判斷(只要有一個為真,結果就是真)and(,,,……)邏輯判斷(全部為真時,結果才是真的)lookup(查找內容,查找內容所在區域,返回的區域)查找 注意:要使用lookup函數必須先對查找內容進行升序排序 vlookup(查找的內容,表格所在區域,返回第幾列的信息,0)查找與首行相匹配的內容,返回指定列的信息
iserror()錯誤檢查
mid(文本字符串,從第幾位提取,提取幾位)從字符串中提取信
息
mod(被除數,除數)取余
concatenate(字符串1,字符串2,……)將255個字符串連接在一起
today()返回當前的系統時間(無參數)
year(日期)提取日期中的年份
fv(利率,存款時間,每期存款金額,賬戶現有金額,期初或期末存錢)零存整取
pmt(利率,還貸時間,貸款金額,最后一次還款金額,期初期末)分期付款