添加、刪除、修改使用db.Execute(Sql)命令執行操作
╔--------------------╗
☆ 數據記錄篩選 ☆
╚--------------------╝
注意:單雙引號的用法可能有誤(沒有測式)
Sql = "Select Distinct 字段名 From 數據表"
Distinct函數,查詢數據庫存表內不重復的記錄
Sql = "Select Count(*) From 數據表 where 字段名1>#18:0:0# and 字段名1< #19:00# "
count函數,查詢數庫表內有多少條記錄,“字段名1”是指同一字段
例:
set rs=conn.execute("select count(id) as idnum from news")
response.write rs("idnum")
sql="select * from 數據表 where 字段名 between 值1 and 值2"
Sql="select * from 數據表 where 字段名 between #2003-8-10# and #2003-8-12#"
在日期類數值為2003-8-10 19:55:08 的字段里查找2003-8-10至2003-8-12的所有記錄,而不管是幾點幾分。
select * from tb_name where datetime between #2003-8-10# and #2003-8-12#
字段里面的數據格式為:2003-8-10 19:55:08,通過sql查出2003-8-10至2003-8-12的所有紀錄,而不管是幾點幾分。
Sql="select * from 數據表 where 字段名=字段值 order by 字段名 [desc]"
Sql="select * from 數據表 where 字段名 like '%字段值%' order by 字段名 [desc]"
模糊查詢
Sql="select top 10 * from 數據表 where 字段名 order by 字段名 [desc]"
查找數據庫中前10記錄
Sql="select top n * form 數據表 order by newid()"
隨機取出數據庫中的若干條記錄的方法
top n,n就是要取出的記錄數
Sql="select * from 數據表 where 字段名 in ('值1','值2','值3')"
╔--------------------╗
☆ 添加數據記錄 ☆
╚--------------------╝
sql="insert into 數據表 (字段1,字段2,字段3 …) valuess (值1,值2,值3 …)"
sql="insert into 數據表 valuess (值1,值2,值3 …)"
不指定具體字段名表示將按照數據表中字段的順序,依次添加
sql="insert into 目標數據表 select * from 源數據表"
把源數據表的記錄添加到目標數據表
╔--------------------╗
☆ 更新數據記錄 ☆
╚--------------------╝
Sql="update 數據表 set 字段名=字段值 where 條件表達式"
Sql="update 數據表 set 字段1=值1,字段2=值2 …… 字段n=值n where 條件表達式"
Sql="update 數據表 set 字段1=值1,字段2=值2 …… 字段n=值n "
沒有條件則更新整個數據表中的指定字段值
╔--------------------╗
☆ 刪除數據記錄 ☆
╚--------------------╝
Sql="delete from 數據表 where 條件表達式"
Sql="delete from 數據表"
沒有條件將刪除數據表中所有記錄)
╔--------------------------╗
☆ 數據記錄統計函數 ☆
╚--------------------------╝
AVG(字段名) 得出一個表格欄平均值
COUNT(*|字段名) 對數據行數的統計或對某一欄有值的數據行數統計
MAX(字段名) 取得一個表格欄最大的值
MIN(字段名) 取得一個表格欄最小的值
SUM(字段名) 把數據欄的值相加
引用以上函數的方法:
sql="select sum(字段名) as 別名 from 數據表 where 條件表達式"
set rs=conn.excute(sql)
用 rs("別名") 獲取統的計值,其它函數運用同上。
╔-----------------------------╗
☆ 數據表的建立和刪除 ☆
╚-----------------------------╝
CREATE TABLE 數據表名稱(字段1 類型1(長度),字段2 類型2(長度) …… )
例:CREATE TABLE tab01(name varchar(50),datetime default now())
DROP TABLE 數據表名稱 (永久性刪除一個數據表)
╔--------------------------╗
☆ 記錄集對象的方法 ☆
╚--------------------------╝
rs.movenext 將記錄指針從當前的位置向下移一行
rs.moveprevious 將記錄指針從當前的位置向上移一行
rs.movefirst 將記錄指針移到數據表第一行
rs.movelast 將記錄指針移到數據表最后一行
rs.absoluteposition=N 將記錄指針移到數據表第N行
rs.absolutepage=N 將記錄指針移到第N頁的第一行
rs.pagesize=N 設置每頁為N條記錄
rs.pagecount 根據 pagesize 的設置返回總頁數
rs.recordcount 返回記錄總數
rs.bof 返回記錄指針是否超出數據表首端,true表示是,false為否
rs.eof 返回記錄指針是否超出數據表末端,true表示是,false為否
rs.delete 刪除當前記錄,但記錄指針不會向下移動
rs.addnew 添加記錄到數據表末端
rs.update 更新數據表記錄
14.查詢數據庫死進程
select * from master..syslogshold
sybase ase中沒有類似mysq的 insert into table values(xxxx) (xxxxx) 那樣的語法。
sybase向一個表使用insert into 插入數據的時候,有2種方式:
一、insert into table select from另外的表 ---- 這種方式根據你寫的select語句,可以一次插入多條記錄。
二、insert into table values(......) --- 這種方式沒插入一條記錄,必須寫一次 insert into values(...) 語句。
你可以在執行go之前提供多個insert into values(...)語句,這樣可以實現你說的一次插入多條記錄:比如:
1>insert into t values(1,'a')
2>insert into t values(2,'b')
3>insert into t values(3,'c')
4>go
另外在ASE15.x版本的isql工具中,你可以使用:1> insert into t values(1,'a')2> go 10實現一次插入10條相同的記錄!
錯誤提示:implict conversion from datatype 'int' to 'char' is。。。
一般是插入值與其對應的數據類型不匹配
http://blog.chinaunix.net/uid-200142-id-3073894.html
===========================使用總結======================================
1、字母大小寫比對不敏感,也就是在值比對判斷時大小寫字母都一樣;
2、等值,或<>判斷,系統默認對等式兩邊比對值去右邊空格再進行比較;
3、GROUP BY 可以根據SELECT字段或表達式的別名來 匯總,在編寫時也盡量避免SELECT 語句的別名與FROM表中的字段有重復,不然會出現莫名其妙的錯誤;
4、FROM后的子查詢 要定義別名才可使用;
5、存儲過程要返回IQ系統錯誤信息 SQLCODE || ERRORMSG(*) :(兩者都為EXCEPTION后第一條SQL語句才有效果);
6、IQ中若采用 FULL JOIN 連接則不能使用 WHERE 條件,否則FULL JOIN將失效,要篩選條件則用子查詢先過濾記錄后再FULL JOIN;
7、建表時,字段默認為非空;
8、UPDATE語句,如果與目標表關聯的表有多條,則不會報錯,而是隨機取一條更新(第一條);
9、RANK() OVER(PARTITION BY .. ORDER BY ..) 分組分析函數,相同的ORDER BY值,返回順序值一樣,且PARTITION BY 只支持一個字段或一個字段組(需多個字段分組的則要用 || 拼為一個字段(待確認,該問題以前碰過一次,再次驗證卻不存在這問題))
10、返回可讀的 全局唯一字符:UUIDTOSTR(NEWID())
11、存儲過程隱式游標語法:
FOR A AS B CURSOR FOR SELECT ... FROM ...
DO
.... 過程語句
END FOR;
需要注意的時,這邊的A 和 B 在 過程語句中都不能引用,所以為避免過程語句其他字段名與FOR SELECT 語句的字段名稱重復,FOR SELECT 語句的字段最好都定義別名區分
12、根據SELECT 語句建立[臨時]表的方法(ORACLE的CREATE TABLE)為 SELECT ..[*] INTO [#]table_name FROM ..; 其中如果在table_name加前綴#,則為會話級臨時表,否則為實體表;
13、因Sybase為列存儲模式,在執行上INSERT語句會比UPDATE語句慢,尤其表數據越多INSERT效率就越慢;所以在ETL時建議多用UPDATE而不是INSERT
14、雖說Sybase為列存儲模式,每個字段上都有默認索引,但對於經常的兩表的關聯鍵還是要建立索引否則會經常報QUERY_TEMP_SPACE_LIMIT不足的錯誤;
15、存儲過程中也可以顯示的執行DDL語句,這點與Oracle不同;
16、空字符串''在Sybase中也是個字符而不是null值,這點要注意;
17、調整SESSION的臨時空間SET TEMPORARY OPTION QUERY_TEMP_SPACE_LIMIT = '150000'; 15000為大小,如寫0則沒限制大小
===========================常用函數====================================
字符串函數
1)ISNULL(EXP1,EXP2,EXP3,...) :返回第一個非空值,用法與COALESCE(exp1,exp2[,exp3...])相同
3)TRIM(exp) :去除兩邊空格
4)DATEFORMAT(date_exp,date_format) :日期型轉字符型;
5)STRING(exp):轉為字符型;
6)SUBSTRING(exp,int-exp1,[int-exp2]):截取exp從int-exp1開始,截取int-exp2個字符;
7)REPLACE(o-exp,search-exp,replace-exp):從o-exp搜索search-exp,替換為replace-exp;
8)SPACE(int_exp):返回int個空格;
8)UPPER(exp):轉為大寫字母,等價於UCASE(exp);
8)LOWER(exp):轉為小寫字母,
8)CHARINDEX(exp1,exp2):返回exp2字符串中exp1的位置!定位,exp1 查找的字符,exp2 被查找的字符串;
8)DATALENGTH(CHAR_EXPR):在char_expr中返回字符的長度值,忽略尾空;
8)RIGHT(char_expr,int_expr):返回char_expr右邊的int_expr個字符;
8)LEFT(char_expr,int_expr):返回char_expr左邊的int_expr個字符;
8)REPLICATE(char_expr,int_expr):重復char_expr,int_expr次;
8)STUFF(expr1,start,length,expr2):用expr2代替epxr1中start起始長為length的字符串;
8)REVERSE(char_expr):反寫char_expr中的文本;
8)LTRIM(char_expr):刪除頭空;
8)RTRIM(char_expr):刪除尾空;
8)STR(float_expr[,length[,decimal]]):進行數值型到字符型轉換;
8)PATINDEX("%pattern%",expression):返回指定樣式的開始位置,否則為0;
8)NULLIF(exp1,exp1):比較兩個表達式,如果相等則返回null值,否則返回exp1
8)NUMBER(*):返回序號,相當於ORACLE的rowid,但有區別;
其他函數
8)RANK() OVER(PARTITION BY .. ORDER BY ..) 分組分析函數,相同的ORDER BY值,返回順序值一樣,且PARTITION BY 只支持一個字段或一個字段組(需多個字段分組的則要用 || 拼為一個字段(待確認))
8)返回可讀的 全局ID UUIDTOSTR(NEWID())
8)COL_LENGTH(tab_name,col_name):返回定義的列長度;兼容性:IQ&ASE
8)LENGTH(exp):返回exp的長度;兼容性:IQ
轉換函數
8)CONVERT(datetype,exp[,format-style]):字符轉日期型 或DATE(exp);兼容性:IQ&ASE
format-style值 輸出:
112 yyyymmdd
120 yyyy-mm-dd hh:nn:ss
SELECT CONVERT(date,'20101231',112),CONVERT(varchar(10),getdate(),120) ;
--結果
2010-12-31 2011-04-07
8)CAST(exp AS data-type):返回轉換為提供的數據類型的表達式的值; 兼容性:IQ
日期函數
8)DAY(date_exp):返回日期天值,DAYS(date_exp,int):返回日期date_exp加int后的日期;MONTH與MONTHS、YEAR與YEARS同理;
8)DATE(exp):將表達式轉換為日期,並刪除任何小時、分鍾或秒;兼容性:IQ
8)DATEPART(date-part,date-exp): 返回日期分量的對應值(整數);
8)GETDATE():返回系統時間;
8)DATENAME(datepart,date_expr):以字符串形式返回date_expr指定部分的值,轉換成合適的名字;
8)DATEDIFF(datepart,date_expr1,date_expr2):返回date_expr2-date_expr1,通過指定的datepart度量;
8)DATEADD(date-part,num-exp,date-exp):返回按指定date-part分量加num-exp值后生成的date-exp值;兼容性:IQ&ASE
date-part日期分量代表值:
縮寫 值
YY 0001-9999
QQ 1-4
MM 1-12
WK 1-54
DD 1-31
DY 1--366
DW 1-7(周日-周六)
HH 0-23
MI 0-59
SS 0-59
MS 0-999
數值函數
8)CEIL(num-exp):返回大於或等於指定表達式的最小整數;兼容性:IQ&ASE;
8)FLOOR(numeric_expr):返回小於或等於指定值的最大整數;
8)ABS(num-exp):返回數值表達式的絕對值;兼容性:IQ&ASE;
8)TRUNCNUM(1231.1251,2):截取數值;不四舍五入;
8)ROUND(numeric_expr,int_expr):把數值表達式圓整到int_expr指定的精度;
8)RAND([int_expr]):返回0-1之間的隨機浮點數,可指定基值;
8)SIGN(int_expr):返回正+1,零0或負-1;
8)SQRT(float_expr):返回指定值的平方根;
8)PI():返回常數3.1415926;
8)POWER(numeric_expr,power):返回numeric_expr的值給power的冪;
8)EXP(float_expr):給出指定值的指數值;
============================常用DDL語=====================================
Sybase中DDL語句不能修改字段的數據類型,只能修改空與非空:
1.刪除列:
ALTER TABLE table_name DELETE column_name;
2.增加列:
ALTER TABLE table_name ADD (column_name DATA_TYPE [NOT] NULL);
3.修改列的空與非空:
ALTER TABLE table_name MODIFY column_name [NOT] NULL;
4.修改列名:
ALTER TABLE table_name RENAME old_column_name TO new_column_name;
5.快速建立臨時表:
SELECT * INTO [#]table_name FROM .....;
6、修改表名:
ALTER TABLE old_table_name RENAME new_table_name
7.增加主鍵約束:
ALTER TABLE tb_name ADD CONSTRAINT pk_name PRIMARY KEY(col_name,..)
8.刪除主鍵約束:
ALTER TABLE tb_name DROP CONSTRAINT pk_name;
9.建立自增長字段,與Oracle的SEQUENCE類似:
CREATE TABLE TMP_001 (RES_ID INTEGER IDENTITY NOT NULL);
10.添加表注釋:
COMMENT ON TABLE table_name IS '....';
11.創建索引:
CREATE INDEX index_name ON table_name(column_name);