SQL 2016標準概念之資料型別

2021-08-18 11:03:31 字數 2322 閱讀 5101

原子構造型別

復合構造型別

本文介紹iso/iec 9075:2016中對sql資料型別的規範描述。

每個資料值都屬於某種資料型別。

資料型別分為預定義型別、構造型別和自定義型別。每個資料型別都有乙個名稱。預定義型別和構造型別的名稱屬於保留字,由iso/iec 9075中描述這些資料型別的相應部分指定。自定義型別的名稱在型別的定義中指定。自定義型別屬於模式物件(schema object)。

預定義資料型別由iso/iec 9075指定,因此,各種sql實現都提供支援。即使在指定時,某些資料型別要求(或者允許)提供某種引數(例如數字型別的精度),它們仍然屬於預定義型別。

預定義資料型別具有原子性。原子型別是指那些值不是由其他資料型別值組成的資料型別。某些操作能夠獲取部分字串或者日期時間值(substring、extract),但這並不意味著字串或日期時間不是原子型別。

構造型別可以是原子型別或者復合型別。復合型別的值由零個或多個值組成,它們屬於某個已宣告的資料型別。

每個資料型別都包含乙個特殊值,稱為空值,有時候使用關鍵字null表示。空值與其他值存在以下幾個方面的不同:

數字型別分為兩種:精確數字型別,包括整數型別和指定了精度及小數字數的數字型別;近似數字型別,也就是浮點數,它的精度是可選的。

每個數字都擁有精度(數字位數),精確數字型別還擁有刻度(小數字數)。算術運算可能使用不同的數字型別或者相同的數字型別,運算結果的型別取決於運算元的型別。如果運算結果的型別不能精確地表示結果值,各種sql實現可以自己決定進行捨入還是截斷。如果結果值超出了運算結果型別的數值範圍,或者在運算元上沒有定義該種算術運算,將會丟擲異常。

乙個字串型別的值是特定字符集中的字串(序列)。字串s中的字元也來自相同的字符集cs。如果s是某個表示式e的值,cs就是為e的宣告型別所指定的字符集。字串型別可以是固定長度,也可以是可變長度,最大長度取決於具體sql實現。乙個字元大物件型別的值是某個字符集中的乙個字串,並且總是與某乙個確定的字串相關。大物件字串長度可變,最大長度取決於具體sql實現,通常可以比其他字串長度更大。

乙個字串可以基於某種具體的字符集指定,方式就是在資料型別中指定character set。具體sql實現可以指定乙個特殊的字符集作為國家字符集,在指定資料型別是可以使用national character、national character varying或者national character large object(或者其他等價的語法形式)指定基於國家字符集的字串型別。

乙個二進位制串型別的值是乙個位元組串(序列)。二進位制串型別可以是固定長度,也可以是可變長度,最大長度取決於具體sql實現。乙個二進位製大物件型別的值是乙個位元組串。二進位製大物件串長度可變,最大長度取決於具體sql實現,通常可以比其他二進位制串長度更大。

乙個布林資料型別的值可以是true或者false。unknown的實際值有時候可以使用空值表示。

日期時間型別存在3種形式,可以用於指定包含日期時間各個部分的值。

乙個timestamp資料型別的值包含日期時間中的year(從0001到9999)、month、day、hour、minute和second值。

乙個time資料型別的值包含日期時間中的hour、minute和second值。

乙個date資料型別的值包含日期時間中的year(從0001到9999)、month、day值。

乙個date值是乙個有效的公曆日期。乙個time值是乙個有效的時間。

timestamp和time可以指定小數秒的精度位數。

timestamp和time還可以指定with time zone,這樣的值都包含乙個時區偏移量。在比較with time zone資料型別的值時,時區偏移量不會考慮在內。

乙個時間間隔型別的值表示一段時間。時間間隔存在兩種型別。第一種型別,稱為year-month時間間隔,包含了year和/或month的間隔精度值。另一種型別,稱為day-time時間間隔,包含了除year和month部分之外的任何連續的日期時間間隔精度值。

xml型別的值稱為xml值。

引用型別是乙個構造資料型別,它的值引用(指向)了某個被引用型別值的儲存位址。唯一可能被引用的物件是型別表(typed tables,使用自定義的結構化型別定義的表)中的行。所以每個被引用的型別都是乙個結構化型別。

乙個集合由零個或多個指定資料型別(稱為元素型別)的元素組成。

陣列是乙個有序集合,陣列中的元素可以存在重複值,通過它們在陣列中的位置進行引用。

陣列型別通過陣列型別建構函式建立。

多重集合(multiset)是乙個允許包含重複值的無序集合。

多重集合型別通過多重集合型別建構函式建立。

欄位是乙個(欄位名, 資料型別)對。欄位的值是它的資料型別的值。

乙個行型別是由乙個或多個字段組成的序列。乙個行型別的值是由這些字段值組成的序列。

數概念 5 高階SQL

資料庫中執行程式 的方法 在資料庫中執行程式語言中定義的函式 create function base36 encode integer returns text as libdir base36 language c immutable strict pgsql擴充套件全在這裡 遞迴查詢和sql支...

MySQL入門之使用SQL99標準的連線查詢

使用sql99標準的連線查詢 join.on.內連線 只返回滿足連線條件的資料 兩邊都有的才顯示 select e.d.from emp e inner join dept d on e.deptno d.deptno 也可以省略inner關鍵字。select e.d.from emp e inne...

數倉維度建模之維度表設計(基礎概念一)

對業務過程的度量稱為事實 在維度建模中,將度量稱為 事實 將環境描述為 維度 維度是用於分析事實所需要的多樣環境 維度所包含的表示維度的列,稱為維度屬性 如開門方式是維度,具體11種方式是維度屬性 維度屬性是查詢約束條件 分組和的基本 是資料包表標籤生成易用性的關鍵。維度的作用一般是查詢約束 分類彙...