Firebird/InterBase內置函數使用說明


 

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;
 
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM