常數

常數 (有時稱為 文字) 指定值。 常數可分為字串常數或數值常數。 數值常數會進一步分類為整數、浮點數或十進位。

所有常數都有 NOT NULL 屬性。

數值常數 (-0) 中的負數零值與不含符號 (0) 的零值相同。

使用者定義類型具有高度類型化, 但弱類型化特殊類型除外。。 這表示 高度類型化 使用者定義的類型只與其自己的類型相容。 不過,常數具有內建類型。 因此,只有在使用者定義類型已強制轉型為常數的內建類型,或常數已強制轉型為使用者定義類型時,才能執行包含 高度類型化 使用者定義類型和常數的作業。 例如,使用 使用者定義類型比較中的表格及特殊類型,下列與常數 14 的比較是有效的:
   SELECT * FROM CAMP_DB_ROSTER
     WHERE AGE > CAST(14 AS YOUTH)
   SELECT * FROM CAMP_DB_ROSTER
     WHERE CAST(AGE AS INTEGER) > 14
下列比較無效:
   SELECT * FROM CAMP_DB_ROSTER
     WHERE AGE > 14

整數常數

整數常數 將整數指定為帶正負號或不帶正負號的數字,最多 19 位數不包含小數點。 如果整數常數的值在大整數的範圍內,則整數常數的資料類型是大整數。 如果整數常數的值超出大整數的範圍,但在大整數的範圍內,則整數常數的資料類型是大整數。 定義在大整數值範圍之外的常數會被視為十進位常數。

請注意,大整數常數的最小文字表示法是 -2,147,483,647 ,而不是 -2,147,483,648 ,這是整數值的限制。 同樣地,大整數常數的最小文字表示法是 -9,223,372,036,854,775,807 ,而不是 -9,223,372,036,854,775,808 ,這是大整數值的限制。

範例:
   64     -15     +100     32767     720176      12345678901

在語法圖中,術語 integer 用於不得包含符號的大型整數常數。

浮點常數

浮點常數 將浮點數字指定為以 E 區隔的兩個數字。 第一個數字可以包括符號和小數點; 第二個數字可以包括符號但不包括小數點。 浮點常數的資料類型是倍精準度。 常數值是第一個數字與第二個數字所指定之 10 次方的乘積; 它必須在浮點數字範圍內。 常數中的位元組數不得超過 30。

範例:
   15E1     2.E5     2.2E-1     +5.E+2

十進位常數

十進位常數 是不超過 31 位數且包含小數點或不在二進位整數範圍內的帶正負號或不帶正負號的數字。 它必須在十進位數範圍內。 精準度是總位數 (包括前導零和尾端零); 小數位數是小數點右邊的位數 (包括尾端零)。

範例:
   25.5     1000.     -15.     +37589.3333333333

十進位浮點常數

除了解譯為 DECFLOAT (34) 的十進位浮點特殊值之外,沒有十進位浮點常數。

這些特殊值為 :INFINITY、NAN 及 SNAN。 INFINITY 代表無限,這是其長度無限大的數字。 INFINITY 之前可以有選用符號。 INF 可以指定來取代 INFINITY。 NAN 代表「非數字 (NaN)」,有時稱為 quiet NaN。 它是代表未定義的結果 不會導致警告或異常狀況的值。 SNAN 代表信號 NaN (sNaN)。 它是代表未定義結果的值, 如果在任何數值作業中定義的任何作業中使用,則會導致警告或異常狀況 。 NAN 和 SNAN 都可以前面有選用性符號,但該符號 對於算術運算而言無效。SNAN 可以在非數值作業中使用,而不會導致警告或異常狀況,例如在 INSERT 的 VALUES 清單中,或作為述詞中比較的常數。
   SNAN   -INFINITY
在環境定義中使用其中一個特殊值 (INFINITY、INF、NAN 或 SNAN) 時,如果可以將它解譯為 ID (例如直欄名稱) ,則會將特殊值的字串表示法強制轉型為十進位浮點數。 範例:
   CAST ('snan' AS DECFLOAT)
   CAST ('INF' AS DECFLOAT)
   CAST ('Nan' AS DECFLOAT) 

根據先前指定的規則,將所有非特殊值解譯為整數、浮點或十進位常數。 若要取得數值十進位浮點數值,請使用具有字串常數的 DECFLOAT 強制轉型函數。 不建議使用浮點常數作為 DECFLOAT 函數的引數,因為浮點不精確,且產生的十進位浮點值可能不同於組成引數的十進位數字字元。 請改用字元常數作為 DECFLOAT 函數的引數。

例如, DECFLOAT ('6.0221415E23' , 34) 會傳回小數浮點值 6.0221415E+23,但 DECFLOAT (6.0221415E23, 34) 會傳回小數浮點值 6.0221415000000003E+23。

字串常數

字串常數 指定 VARCHAR 類型的可變長度字串。 常數值字串單位是由環境預設字串單位來決定。 字串常數有三種形式:
  • 以字串定界字元 (即單引號 (')) 開頭和結尾的一連串字元。 字串定界字元之間的位元組數不能大於 32672。 當環境字串單元為 CODEUNITS32時,代碼單元數不能大於 8168。 兩個連續字串定界字元用來代表字串內的一個字串定界字元。 兩個不包含在字串內的連續字串定界字元代表空字串。
  • X 後面接著一連串以字串定界字元開頭和結尾的字元。 這種形式的字串常數也稱為 十六進位常數。 字串定界字元之間的字元必須是偶數個十六進位數字。 系統不處理字串定界字元之間的空白。 十六進位數字數目不得超過 32672。 當環境字串單位為 CODEUNITS32時,十六進位常數所代表的代碼單位數不能大於 8168。 兩個連續字串定界字元用來代表字串內的一個字串定界字元。 十六進位數字是 0 到 9 的數字或任何字母 A 到 F (大寫或小寫)。 根據十六進位表示法的慣例,每對十六進位數字代表一個位元組。 常數會以區段字碼頁來解譯。 這種字串常數形式可讓您指定沒有鍵盤表示法的字元。
  • U& followed by a sequence of characters that starts and ends with a string delimiter and that is optionally followed by the UESCAPE clause. 這種形式的字串常數也稱為 Unicode 字串常數。 字串定界字元之間的位元組數不能大於 32672。 當環境字串單位為 CODEUNITS32時, Unicode 字串常數代表的代碼單位數不能大於 8168。 在陳述式編譯期間, Unicode 字串常數會從 UTF-8 轉換成區段字碼頁。 兩個連續字串定界字元用來代表字串內的一個字串定界字元。 兩個連續 Unicode 跳出 字元用於代表字串中的一個 Unicode 跳出 字元,但這些字元在計算字元常數長度時計為一個字元。 兩個不包含在字串內的連續字串定界字元代表空字串。 因為 UTF-8 中的字元範圍可以從 1 到 4 個位元組,所以長度上限的 Unicode 字串常數實際上可能代表少於 32672 個字元。

    字元可以用其 拼字字元 (glyph) 或其 Unicode 字碼點來表示。 Unicode 字元的字碼點範圍從 X'000000 '至 X'10FFFF'。 若要透過字碼點來表示 Unicode 字元,請使用 Unicode 跳出字元後接 4 個十六進位數字,或 Unicode 跳出字元後接加號 (+) 及 6 個十六進位數字。 預設 Unicode 跳出字元是反向 solidus (\) ,但可以使用 UESCAPE 子句指定不同的字元。 UESCAPE 子句指定為 UESCAPE 關鍵字,後面接著字串定界字元之間的單一字元。 Unicode 跳出字元不能是加號 (+)、雙引號 (")、單引號 (')、空白或 0 到 9 或 A 到 F 的任何字元 (大寫或小寫) (SQLSTATE 42604)。 兩種將拉丁文大寫字母 A 指定為 Unicode 字碼點的方式範例為 \0041 及 \ + 000041。

當常數值連結至資料庫時,一律會轉換成資料庫字碼頁。 它被視為採用資料庫字碼頁。 因此,如果在結合常數與 FOR BIT DATA 直欄的表示式中使用,且其結果為 FOR BIT DATA ,則在使用時不會從其資料庫字碼頁表示法轉換常數值。

範例:
'12/14/1985'    '32'    'DON''T CHANGE'    ''
X'FFFF'    X'46 72 61 6E 6B'
U&'\0141ód\017A is a city in Poland'   U&'c:\\temp'   U&'@+01D11E' UESCAPE '@'
範例中第二行最右邊的字串代表 ASCII 字串 Frank的 VARCHAR 型樣。 最後一行對應於: 羅茲是波蘭城市c:\temp以及代表音樂符號 G clef 的單一字元。

圖形字串常數

圖形字串常數 指定 VARGRAPHIC 類型的可變長度圖形字串。
非 Unicode 資料庫
在非 Unicode 資料庫中,圖形字串常數由一連串雙位元組字元組成,以單位元組單引號 (') 開頭和結尾,且前面有單位元組 G 或 N。 單引號之間的字元必須代表偶數個位元組,且圖形字串長度不得超過 16336 個雙位元組。 單引號不得顯示為 MBCS 字元的一部分,否則會被視為定界字元。 例如:
   G'double-byte character string'
   N'double-byte character string'
Unicode 資料庫
在 Unicode 資料庫中,圖形字串常數由一連串以單引號 (') 開頭和結尾的字元組成,且前面有 G 或 N 字元。 常數值字串單位由環境預設字串單位決定。 單引號之間的字元會轉換為字碼頁 1200 ,且圖形字串的長度不得超過 16336 個雙位元組。 當環境字串單位為 CODEUNITS32時,代碼單位數不得超過 8168。

在 Unicode 或 DBCS 資料庫中,也支援指定可變長度圖形字串的 十六進位圖形字串常數。 十六進位圖形字串常數的格式為 :GX 後面接著一連串以單引號開頭和結尾的字元。 單引號之間的字元必須是四個十六進位數字的偶數倍數。 十六進位數字數目不得超過 32 672。 當環境字串單位為 CODEUNITS32時,十六進位圖形字串常數所代表的代碼單位數不得超過 8 168; 否則會傳回錯誤 (SQLSTATE 54002)。 如果十六進位圖形字串常數格式不正確,則會傳回錯誤 (SQLSTATE 42606)。 每一個四位數的群組都代表 區段 DBCS 字碼頁中的單一圖形字元。 在 Unicode 資料庫中,這會是單一 UTF-16 BE 圖形字元。

範例:
   GX'FFFF'
代表 Unicode 資料庫中的位元型樣 '1111111111111111'。
   GX'005200690063006B'
代表 Unicode 資料庫中 ASCII 字串 Rick 的 VARGRAPHIC 型樣。

二進位字串常數

二進位字串常數指定 VARBINARY 類型的可變長度二進位字串。

二進位字串常數是透過指定 BX ,後面接著一連串以字串定界字元開頭和結尾的字元來形成。 字串定界字元之間的字元必須是偶數個十六進位數字。 十六進位數字數目不得超過 32672。

十六進位數字是數字 0-9 或任何字母 A 到 F (大寫或小寫)。 在十六進位表示法的慣例下,每對十六進位數字代表 1 個位元組。 此表示法類似於使用 X'' 形式的字元常數表示法。 不過,二進位字串常數和字串常數不相容,無法使用 X'' 格式來指定二進位字串常數,就像 BX'' 格式無法用來指定字串常數一樣。

二進位字串常數的範例:
BX'0000'
BX'C141C242'
BX'FF00FF01FF'

日期時間常數

日期時間常數 指定日期、時間或時間戳記。

通常,字串常數用來代表指派及比較中的常數日期時間值。 不過,相關聯的資料類型名稱可以在字串常數的特定格式之前使用 ,以將常數明確表示為日期時間常數,而不是字串常數。 三個日期時間常數的格式如下:
DATE 'yyyy-mm-dd'
值的資料類型為 DATE。
TIME 'hh:mm:ss'
TIME 'hh:mm'
該值的資料類型為 TIME。
TIMESTAMP 'yyyy-mm-dd hh:mm:ss.nnnnnnnnnnnn'
TIMESTAMP 'yyyy-mm-dd-hh.mm.ss.nnnnnnnnnnnn'
其中小數秒的位數可以從 0 到 12 ,如果沒有小數秒,則可以省略句點字元。 該值的資料類型為 TIMESTAMP (p) ,其中 p 是小數秒的位數。
在這些日期時間常數中,字串常數部分的月、日及小時部分可以省略前導零 (如果適用的話)。 TIME 或 TIMESTAMP 常數的分鐘及秒元素必須包含前導零字元。 尾端空白可以併入且會被忽略。

UTF-16 BE 圖形字串常數

支援指定可變長度 UTF-16 BE 圖形字串常數的十六進位 UTF-16 BE 圖形字串。 十六進位 UTF-16 BE 圖形字串常數的格式為 :UX 後面接著以撇號開頭及結尾的一連串字元。 單引號之間的字元必須是四個十六進位數字的偶數倍數。 十六進位數字的數目不得超過 16336; 否則會傳回錯誤 (SQLSTATE 54002)。 如果十六進位 UTF-16 BE 圖形字串常數格式不正確,則會傳回錯誤 (SQLSTATE 42606)。 每一個四位數的群組都代表單一 UTF-16 BE 圖形字元。

範例:
   UX'0042006F006200620079'
代表 ASCII 字串 Bobby的 VARGRAPHIC 型樣。

布林常數

布林常數指定關鍵字 TRUE 或 FALSE ,其代表對應的真值。 可以使用 CAST (NULL as BOOLEAN) 來指定不明事實值。