Firebird/InterBase內置函數使用說明(轉自:聖域天堂) 2008-10-12 20:56 加*號為FB2.0加入的函數 整理:劍雷(jianlei) 2006-10-13 1. COUNT, AVG, MAX, MIN, SUM 說明:通用統計函數,不詳細介紹了 2. EXTRACT(timestamp_part FROM value) 說明:EXTRACT(YEAR/MONTHE/DAY/WEEKDAY FROM 字段名) 從日期型字段中分離出年,月,日及一個星期的第幾天 3. CAST(value AS datatype) 說明:轉換數據類型 4. LOWER() * 說明:返回小寫值 5. UPPER() 說明:返回大寫值 6. TRIM() * 說明:去除字符串兩邊的空格 7. SUBSTRING(string FROM pos FOR length) 說明:取字符串子串,注意,第一個字符的位置是1 8. BIT_LENGTH * 說明:返回字符串位(bit)數 9. CHAR_LENGTH/CHARACTER_LENGTH * 說明:返回字符串字符數 10. OCTET_LENGTH * 說明:返回字符串字節數 11. CASE 說明:通過執行外來的一組條件取得相應的返回值 舉例 i) 簡單 SELECT o.ID, o.Description, CASE o.Status WHEN 1 THEN 'confirmed' WHEN 2 THEN 'in production' WHEN 3 THEN 'ready' WHEN 4 THEN 'shipped' ELSE 'unknown status ''' || o.Status || '''' END FROM Orders o; ii) 表達式 SELECT o.ID, o.Description, CASE WHEN (o.Status IS NULL) THEN 'new' WHEN (o.Status = 1) THEN 'confirmed' WHEN (o.Status = 3) THEN 'in production' WHEN (o.Status = 4) THEN 'ready' WHEN (o.Status = 5) THEN 'shipped' ELSE 'unknown status ''' || o.Status || '''' END FROM Orders o; 12. IIF (<search_condition>, <value1>, <value2>) 說明:表達式為真,返回value1否則返回value2 等價於以下語句: CASE WHEN <search_condition> THEN <value1> ELSE <value2> END 13. NULLIF(V1,V2) 說明:如果V1=V2,返回NULL,否則返回V1 等價於以下語句: CASE WHEN V1 = V2 THEN NULL ELSE V1 END 舉例 UPDATE PRODUCTS SET STOCK = NULLIF(STOCK,0) 14. COALESCE(V1, V2, …, Vn) 說明:如果V1為Null,返回V2,否則返回V1, 如果 n >= 3, 等於如下case語句: CASE WHEN V1 IS NOT NULL THEN V1 ELSE COALESCE (V2,...,Vn) END 舉例 SELECT PROJ_NAME AS Projectname, COALESCE(e.FULL_NAME,'[< not assigned >]') AS Employeename FROM PROJECT p LEFT JOIN EMPLOYEE e ON (e.EMP_NO = p.TEAM_LEADER); SELECT COALESCE(Phone,MobilePhone,'Unknown') AS "Phonenumber" FROM Relations; 15.獲當前日期: select current_date from rdb$database 獲當前時間: select current_time from rdb$database 16.Firebird數據庫的取值范圍 在其它SQL數據庫里,有一個 Top n的子句,可以取頭n條記錄,Firebird不支持這個子句,但是它有更強大的子句:FIREST n SKIP n。 FIRST n表示提取頭n條記錄,SKIP n 表示從第幾條開始提取,比如,我要從學生表里取語文成績名次在11至15名的學生名單,SQL語句如下: select first 5 skip 10 SNAME,YUWEN from achieve order by YUWEN desc 一、分頁寫法小例: SELECT FIRST 10 templateid,code,name FROM template ; SELECT FIRST 10 SKIP 10 templateid,code,name FROM template ; SELECT * FROM shop ROWS 1 TO 10; --firebird2.0支持這種寫法 二、顯示表名和表結構 SHOW TABLES; SHOW TABLE tablename; 三、使用ISQL連接數據庫 firebird%92bin>isql -u sysdba -p masterkey SQL>CONNECT 'E:companyxmwsoftnewxmwsoftc2dbcts2.fdb'; 或 SQL>CONNECT 'E:%92' CON>USER 'sysdba' CONT>PASSWORD 'masterkey'; 四、更新字段注釋 UPDATE RDB$RELATION_FIELDS SET RDB$DESCRIPTION = '描述信息' WHERE (RDB$RELATION_NAME = 'SHOP') AND (RDB$FIELD_NAME = 'CREDIT_BUY') 五、顯示字段注釋 SELECT RDB$FIELD_NAME,RDB$DESCRIPTION FROM RDB$RELATION_FIELDS WHERE (RDB$RELATION_NAME = 'SHOP') AND (DB$FIELD_NAME = 'CREDIT_BUY') 六、更新表注釋 UPDATE RDB$RELATIONS SET RDB$DESCRIPTION = '描述信息' WHERE RDB$RELATION_NAME = 'TABLE_NAME'; 七、查詢所有的表和視圖(包括系統表和系統視圖) SELECT RDB$RELATION_NAME FROM RDB$RELATIONS; 八、查詢所有的用戶表和用戶視圖 SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WHERE RDB$SYSTEM_FLAG = 0; 九、查詢所有的用戶表 SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WHERE RDB$SYSTEM_FLAG = 0 AND RDB$VIEW_BLR IS NULL; 十、查所有用戶表、用戶視圖所有字段及相關定義 SELECT a.RDB$RELATION_NAME, b.RDB$FIELD_NAME, b.RDB$FIELD_ID, d.RDB$TYPE_NAME, c.RDB$FIELD_LENGTH, c.RDB$FIELD_SCALE FROM RDB$RELATIONS a INNER JOIN RDB$RELATION_FIELDS b ON a.RDB$RELATION_NAME = b.RDB$RELATION_NAME INNER JOIN RDB$FIELDS c ON b.RDB$FIELD_SOURCE = c.RDB$FIELD_NAME INNER JOIN RDB$TYPES d ON c.RDB$FIELD_TYPE = d.RDB$TYPE WHERE a.RDB$SYSTEM_FLAG = 0 AND d.RDB$FIELD_NAME = 'RDB$FIELD_TYPE' ORDER BY a.RDB$RELATION_NAME, b.RDB$FIELD_ID; 十一、查找某表的所有字段及相關定義 SELECT A.RDB$FIELD_NAME, B.RDB$FIELD_TYPE, B.RDB$FIELD_LENGTH, B.RDB$FIELD_PRECISION, B.RDB$FIELD_SCALE FROM RDB$RELATION_FIELDS A, RDB$FIELDS B WHERE A.RDB$RELATION_NAME = 'tablename' AND A.RDB$FIELD_SOURCE = B.RDB$FIELD_NAME ORDER BY A.RDB$FIELD_POSITION; 十二、查找某表的主鍵定義字段 SELECT A.RDB$FIELD_NAME FROM RDB$INDEX_SEGMENTS A, RDB$RELATION_CONSTRAINTS B WHERE B.RDB$CONSTRAINT_TYPE = 'PRIMARY KEY' AND B.RDB$RELATION_NAME = 'tablename' AND A.RDB$INDEX_NAME = B.RDB$INDEX_NAME ORDER BY A.RDB$FIELD_POSITION; 十三、查找某表的外鍵定義 SELECT r1.RDB$CONSTRAINT_NAME, rind.RDB$FIELD_NAME, r2.RDB$RELATION_NAME FROM RDB$RELATION_CONSTRAINTS r1, RDB$RELATION_CONSTRAINTS r2, RDB$REF_CONSTRAINTS ref, RDB$INDEX_SEGMENTS rind WHERE r1.RDB$RELATION_NAME = 'tablename' AND r1.RDB$CONSTRAINT_TYPE = 'FOREIGN KEY' AND r1.RDB$CONSTRAINT_NAME = ref.RDB$CONSTRAINT_NAME AND ref.RDB$CONST_NAME_UQ = r2.RDB$CONSTRAINT_NAME AND r1.RDB$INDEX_NAME = rind.RDB$INDEX_NAME;