少なくともいくつかの問題があります。
- 標準には、1986 年、1989 年、1992 年 (一部は 1996 年ごろ)、1999 年、2003 年、2008 年、2011 年版など、さまざまなバージョンがあります。
- 最近の標準には複数の部分があります。SQL/Foundation (コア SQL) だけでなく、オプションの拡張機能も多数あります。
- 各 DBMS には SQL 標準に対する独自の拡張機能があり、標準のいくつかの側面も省略されています。
標準の一部のバージョンの BNF (Backus-Naur Format) 文法は、こちらで入手できます。これらはハイパーリンクの多い HTML です。ただし、標準は SQL 文法だけではありません。標準の残りの部分には、いつ、どこで何が許可されるかについて、多くの (そして、さらに多くの) 規則があります (通常、その理由についてはあまり説明されていません)。標準は、ほとんど不可能なほど不透明な場合があります。
これは、ISO/IEC 9075-2:2003 (E) からの飼いならされた例です。これは、SQL-2003 の SQL/Foundation です。
10.7<collate clause>
関数
デフォルトの照合を指定します。
フォーマット
<collate clause> ::= COLLATE <collation name>
構文規則
1) C を に<collation name>
含まれているとし<collate clause>
ます。の明示的または暗黙的な修飾子によって識別されるスキーマには<collation name>
、C の記述子が含まれます。
アクセス ルール
1) ケース:
a) が含まれている場合、SQL SECURITY INVOKER を指定<collate clause>
する介在なしで、含まれているスキーマを所有するの適用可能な特権には、
C での USAGE が含まれます。<SQL routine spec>
<SQL schema statement>
<authorization identifier>
b) それ以外の場合、現在の特権には C の USAGE が含まれるものとします。
注 228 — 「適用可能な特権」および「現在の特権」は、12.3 項「<コード><特権>」で定義されています。
一般的なルール
なし。
適合規則
1) 機能 F690、「照合サポート」がなければ、準拠する SQL 言語には<collate clause>
.
あまりおとなしい例は、それ<cast specification>
を説明する 16 ページの gobbledygook があるものです。これは途中から約2/3です。それは「一般規則」番号 16 (20 のうち) です。
16) TD が日時データ型 TIME WITH TIME ZONE の場合、TSP<time precision>
を TD とする。
場合:
a) SD が文字列の場合、SV は次のように置き換えられます。
TRIM ( BOTH ' ' FROM VE )
場合:
i)データ型 TD の有効な値を決定するために、5.3 節「<code><literal>」のルール<literal>
またはルールを SV に適用できる場合、TV をその値とします。<unquoted time string>
ii) 5.3 節の「<code><literal>」の規則を SV に適用して、データ型 TIME(TSP) WITHOUT TIME ZONE の有効な値を決定できる場合、TV1 をその値とし<literal>
、<unquoted time string>
TV を次の値とします。
CAST ( TV1 AS TIME(TSP) WITH TIME ZONE )
iii) a<datetime value>
がグレゴリオ暦による日付または時刻の自然規則に準拠していない場合、例外条件が発生します: データ例外 — 無効な日時形式。
iv) それ以外の場合、例外条件が発生します: データ例外 — キャストに対して無効な文字値。
b) SD が TIME WITH TIME ZONE の場合、TV は SV であり、必要に応じて実装定義の丸めまたは切り捨てが行われます。
c) SD が TIME WITHOUT TIME ZONE の場合、TV の UTC コンポーネントは SV – STZD であり、24 時間を法として計算され、必要に応じて実装定義の丸めまたは切り捨てが行われ、TV のタイムゾーン コンポーネントは STZD です。
d) SD が TIMESTAMP WITH TIME ZONE の場合、TV の UTC コンポーネントは<primary datetime field>
SV の時、分、秒であり、必要に応じて実装定義の丸めまたは切り捨てが行われ、TV のタイム ゾーン コンポーネントはタイム ゾーンの変位です。 SVの。
e) SD が TIMESTAMP WITHOUT TIME ZONE の場合、TV は次のとおりです。
CAST ( CAST ( SV AS TIMESTAMP(TSP) WITH TIME ZONE )
AS TIME(TSP) WITH TIME ZONE )
標準ではインデントが少し良くなり、一部の名前 (TV、SV、SD など) のコンテキストがもう少し増えますが、使用される言語は実際にはそれほど乱暴です。