問題タブ [ansi-sql]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
258 参照

sql - ANSISql2003字句解析間隔

私自身の利益のために、ANSISQLLexerを作成しています。具体的には、ISO / IEC 9075-2:2003(E)に準拠しようとしています。トークンの段階で、あいまいな問題が発生しました。

語彙要素セクションでは、間隔文字列を次のように定義します。

例:「30」

30はオプションなしの<年の値>ですか、それとも<月の値>ですか?

理論的には次のように書くことができます:SELECT '30'

YearsValueトークンとMonthsValueトークン(クラス)を作成しました。ただし、あいまいさは問題であり、両方に一致します。ISO /IEC9075のパート1またはパート2で複数の一致を具体的に扱っているものは見当たりません。

誰かがこれが仕様のどこで処理されているかを指摘できますか、それとも左から右に想定されていますか?

誰かが尋ねる前に、私はSQLレクサーを書きたいので、これを行っています。それは学校のためではなく、自分自身を教育するための何かです。GOLDもANTLRも使いたくない。

0 投票する
2 に答える
276 参照

sql - SQL グループから最初に一致する行を取得します

次のような投影があるとします。

次の最初のリレーションを返すにはどうすればよいですか。

つまり、各画家が最初に描いた絵..

ANSI SQL のみ

0 投票する
2 に答える
94 参照

sql - 実際の開始日と終了日を維持しながら、同日のドロップ/追加を除外する

製品へのサブスクリプションのステータス更新を示す表があります。サブスクリプションの開始時にレコードがテーブルに挿入され、サブスクリプションの終了時にそのレコードが終了日で更新されます。私たちのシステムの 1 つ (どのシステムかはわかりません) は、サブスクリプションを終了してから再び開始する (新しいレコードを作成する) 「同日ドロップ/追加」を行うことがあります。そのため、実際には何も変更されていないにもかかわらず、同じ購読者 ID が複数のレコードに関連付けられます。

サンプルデータは次のとおりです。

この男は1/11に始まり、1/20に終わった。レコード 2 と 3 はシステムによって挿入されました (同日ドロップ追加ですが、実際にはそうではありませんでした)。レコード 4 は、19 さんが後で開始した別のサブスクリプションです。

各個別のサブスクリプションの最初の (実際の) レコードのみを解決しようとするコードがいくつかありますが、max() を使用してサブスクライバーごとにグループ化しないと、実際の終了日を見つけることができません。もちろん、1/11 - 1/31 と 1/30 - 1/31 の 2 つのサブスクリプションが表示されますが、これは誤りです。

このパターンを次のような 2 つのレコードに解決しようとして、私は頭を悩ませています。

これは Teradata にありますが、単なる ANSI SQL だと思います。

0 投票する
2 に答える
46 参照

sql - 結果リストの先頭に指定されたレコード

タスク: 結果リストの一番上で指定されたレコードを選択する

私の醜い変種:

ansiクエリバリアントのほかにもmysql、私にとって非常に興味深いでしょう

0 投票する
2 に答える
17117 参照

sql - 標準のSQLブール演算子ISvs.equals(=)演算子

SQLのWikipediaページには、SQLのブール論理に関するいくつかの真理値表があります。[1]ウィキペディアのページはSQL:2003標準を提供しているようです。

等号演算子(=)の真理値表は、SQL:2003ドラフトのIS演算子とは異なります。

また、ウィキペディアの記事には、「IS NULL」(<null述語>)は特殊なケースであると記載されています。

SQL:2003には、AND、NOT、ORなどの通常の演算子である「IS」演算子があるようです。ただし、<null述語>はまだ存在します。

ISが通常のブール演算子であるのに<null述語>があるのはなぜですか?型の強制なしにブール値以外の値で「ISNULL」構文を使用できることを確認するためですか?「=NULL」を使用することはお勧めしませんか?

SQL:2011標準の動作は異なりますか?

[1]:SQLに関するウィキペディア

[2]:SQL:2011ドラフトPDFページ335

[3]:SQL:2003ドラフト PDFページ397

0 投票する
9 に答える
21130 参照

sql - IS DISTINCT FROM と IS NOT DISTINCT FROM を書き換えるには?

サポートされていない Microsoft SQL Server 2008R2 などの SQL 実装で、標準のIS DISTINCT FROMand演算子を含む式をどのように書き換えますか?IS NOT DISTINCT FROM

0 投票する
2 に答える
2817 参照

sql - 「INDEX」は有効な SQL ANSI ISO 標準キーワード/予約語ですか?

「INDEX」がANSI SQLのキーワードであるかどうかについて調査しましたが、特に2008年と2011年の標準ではうまくいきませんでした。

これが有効な ANSI ISO SQL キーワードであるかどうかは誰にもわかりますか?

0 投票する
1 に答える
19133 参照

sql - SQL:DATE型の列を持つ集計関数

私は(テストで)どの集計関数がDATE型の列に適用できるかについての質問に出くわしました。したがって、私が理解しているように、COUNTは行数をカウントするだけで、MINとMAXは最も早い/最も遅い日付を返します。ただし、SUM関数とAVG関数については少し混乱しています。DATE値をintに変換し、それらのintの合計/平均を計算するだけですか?それとも私はここで間違っていますか?とにかく、この動作はSQLのすべての実装で一貫していますか?前もって感謝します。

0 投票する
1 に答える
4506 参照

sql - SELECT *ステートメントの列の順序 - 保証されていますか?

ORM (sqlalchemy) を使用して PG データベースからデータを取得しています。手作りの SQL ステートメントですべてのテーブル列名を指定することは避けたい*。

これまでのところ、返された列は、db テーブルの作成に使用された DDL ステートメントの順序になっていると想定しています。これまでのところ、これは機能していますが、これが単なる運なのか、それとも (ANSI) SQL 仕様で具体的に対処されているのかを知りたいです。

つまり、ANSI SQL (およびおそらくデータベース) は、SELECT *ステートメントで返される列の順序を保証しますか?

バックエンドデータベースとしてPostgreSQL 8.4を使用しています

  • はい、ORM で手作りの SQL ステートメントを使用すると、ORM の目的が損なわれることは承知していますが、...
0 投票する
4 に答える
1834 参照

sql - Sybase *= 同じ内部テーブルに対して 2 つの異なる外部テーブルを持つ Ansi 標準へ

いくつかのレガシー手続き型コードを移行しようとしています。同じ結果を生成するための ANSI 標準構文を理解するのに苦労しています。

以下は、私が試した多くの組み合わせの1つです。2 番目の結合の内部テーブルは何ですか。それは最初の結合からの出力ですか、それともソース テーブルですか。

変更するコードがたくさんあるので、助けてください。

元の SQL ステートメント

私の回心

以下は、SQL テーブルの定義とサンプル データです。