コンピューター ウィンドウズ インターネット

ヌル値(ヌルがあり、ヌル()があります)。 値null(nullがありnullがあります())リクエスト1cにnullがあります

ヌル-欠測値。
nullと混同しないでください! NULLは数値ではなく、スペースと等しくなく、空の参照、未定義です。

NULLは型を形成する値です。つまり、 タイプNULLとこのタイプの単一の値があります。

NULL値は、次の状況でクエリに表示されます。
a)外部結合。対応するレコードが別のテーブルに見つかりませんでした(左側のレコードが2番目に、右側のレコードが最初に、完全なテーブルが両方にあります)
b)グループの要素の属性を参照する。その逆も同様です。
c)選択フィールドのリストでNULL(SELECT)
d)壊れたリンクの詳細を参照する

無効です SELECT演算子で使用されます(値が空であることを確認するかのように(値はNULL)):
コード1Cv 8.x
選択
WHEN値がNULLの場合結果NULLの場合
ELSE値
終わり

もう一つの例:
コード1Cv 8.x SELECT

命名法の会計残高の場合に選択します。金額残高がNULLの場合は0
ELSE命名法会計残高。数量残高AS数量残高
から



どこ

関数 ISNULL(値、ResultIf NULL) NULLでない場合は最初のパラメーターの値を返し、そうでない場合は2番目のパラメーターの値を返します。
折りたたまれたSELECT ... ENDですが、ISNULLが推奨されます。
コード1Cv 8.x
選択する
ISNULL(Directory.Nomenclature.Article、 "---")AS Article、
Reference.Nomenclature.Presentation AS Nomenclature

もう一つの例:
コード1Cv 8.x
選択する
命名法のディレクトリ。
IS NULL(NomenclatureAccountingBalance.QuantityRemainment、0)ASQuantityRemainment
から
Directory.NomenclatureASディレクトリ
LEFT JOIN Accumulation Register.AccountingNomenclature.Balances AS AccountingNomenclatureBalances
ソフトウェアNomenclatureAccountingBalances.Nomenclature = Nomenclature Directory.Link
どこ
DirectoryNomenclature.ThisGroup = FALSE
V この例在庫リストのすべての要素が取得され、その後、各在庫について、現在の残高が累積レジスタから取得されます。 なぜなら 残高がないアイテムの場合、残高の仮想テーブルはレコードを返しません。「NomenclatureAccountRemains.Quantity」フィールドでの接続の結果として、残高があったアイテムにはNULL値があります。バランスがありません。 クエリ結果でNULL値の代わりに値0を使用するために、IS NULL()関数を使用しました。これにより、目的の置換が実行されます。

無効です次の理由でCHOICEとは異なります。
a)IS NULLの場合、クエリはより読みやすくなります(より簡単に)
b)IS NULLの場合、複雑な式がチェックされていると、一度評価されるため、より高速に動作します。
c)IS NULLの場合、置換式は、文字列(長さ)または数値(ビット幅)タイプであれば、テストされた式のタイプにキャストされます。

3値論理はSQL(True、False、NULL)で動作し、そのような比較の結果はUNKNOWNになり、1C 8.0ではFALSEに似ているため、通常の等式でNULLの値をチェックすることはできません。
ヌル<>0なので、左外部結合の場合はrefを参照してください。 残高、価格、相互決済のあるカウンターパーティの表を含む命名法では、そのような記録がない場合、0に等しくないNULLが存在します。 最良の解決策- 無効です

クエリ言語を使用しているときに、NULL値を他の値に置き換える必要がある場合があります。 このような操作の必要性は、たとえば、アイテム全体の在庫残高を受け取るときに発生する可能性があります。 この記事では、ISNULL()クエリ言語関数を使用して同様の問題を解決する方法について説明し、他の解決策についても説明します。

ISNULL関数

ISNULL()関数はクエリ言語で実装されます。その目的は、式がNULLの場合に式を別の式に置き換えることです。 この関数の構文図は次のようになります。

無効です (<Проверяемое выражение>, <Выражение замены>)

この機能 NULLでない場合は最初のパラメーターの値を返し、そうでない場合は2番目の式の値を返します。


選択する
IS NULL(NomenclatureAccountingBalance.QuantityRemainment、0)ASQuantityRemainment
から

どこ

この例では、アイテムカタログのすべての要素が取得され、その後、各アイテムについて、現在の残高が累積レジスタから取得されます。 なぜなら 残高がないアイテムの場合、残高の仮想テーブルはレコードを返しません。「NomenclatureAccountRemains.Quantity」フィールドでの接続の結果として、残高があったアイテムにはNULL値があります。バランスがありません。 クエリ結果でNULL値の代わりに値0を使用するために、IS NULL()関数を使用しました。これにより、目的の置換が実行されます。

SELECT操作の使用

前述の問題を解決するには、SELECTクエリ言語操作を使用できます。 前のクエリと同様のクエリがどのように表示されるかの例は、次のようになります。


選択する
命名法のディレクトリ。
命名法の会計残高の場合に選択します。金額残高がNULLの場合は0
ELSE命名法会計残高。数量残高AS数量残高
から
Directory.NomenclatureASディレクトリ
LEFT JOIN Accumulation Register.AccountingNomenclature.Balances AS AccountingNomenclatureBalances
ソフトウェアNomenclatureAccountingBalances.Nomenclature = Nomenclature Directory.Link
どこ
DirectoryNomenclature.ThisGroup = FALSE

このクエリの結果は、前のセクションで示したクエリの結果と同じになります。

次の理由から、SELECT操作を使用するよりもISNULL()関数を使用することをお勧めします。ISNULL()を使用した書き込みはややコンパクトであり、クエリの可読性が向上します。 さらに、テストされた式が集計関数を含む複雑な関数である場合、ISNULL()関数の評価は、CHOICE関数を使用して記述されたアナログよりも高速になる可能性があります。

ISNULL関数の機能

ISNULL()関数は、値のNULLをチェックするSELECT操作に類似していますが、それでも違いがあります。 違いは、関数式が文字列型または数値型の場合、置換式はテストされた式の型に変換されることです。

したがって、たとえば、テストされた式が文字列(5)タイプであり、置換式が文字列(10)タイプである場合、結果のタイプは文字列(5)タイプに変換されます。 その結果、関数が置換式を返す場合、値は5文字に切り捨てられます。

数値式の場合、状況は似ています。置き換えられる式の値は、テストされた式のタイプに変換されます。 置き換える式は切り捨てることができます。 値を変換できない場合、クエリ言語はエラーでクエリを終了します。 たとえば、数値1000を数値(2)タイプに変換しようとすると、エラーが発生します。

こんにちは。
プリミティブデータ型について続けて、最近検討しましたが、今日は NULLと入力します.

NULL型は、「NULL」値である1つの値のみを含むことができるリテラルです。
NULL-空の参照、スペース、またはタイプ未定義と等しくありません。

これは、データベースを操作するとき(テーブルを結合するとき)に使用され、データベースを操作するときに欠落している値を判別するために使用されます。
この値を変数に割り当てることにより、NULL値を取得できます。
変数= NULL。

あるテーブルの要素が別のテーブルの対応する要素を条件付きで見つけられない場合、結合の結果としてNULL値が形成されます。 NULL値には特定の機能があります:
-NULL値を他の引数と比較すると、常にfalseが返されます。

NULL値を定義するには、構文を使用します 無効です.
NULLタイプを変換するには、関数を使用します ISNULL(isNULL).

クエリの結果としてNULL値を含むフィールドを切り取るために、次の構造が使用されます:-はNULLではありません-はNULLではありません

の例

NULLの値をチェックする例

SELECTディレクトリ。 命名法。 名前、参照。 命名法。 購入価格WHEREディレクトリ。 命名法。 購入価格がNULL

ISNULL()関数の例
関数の戻り値はNULL()です。最初のパラメーターにNULL値が含まれていない場合は最初のパラメーターの値、それ以外の場合は2番目のパラメーターの値。 最初のパラメーターのタイプが文字列または数値の場合、2番目のパラメーターは最初のパラメーターのタイプに変換されます。

//数量フィールドの金額を取得します。 レコードがない場合は、0を取得します SELECT IS NULL(SUM(数量)、0)AS数量FROMドキュメント。 委託 化合物

よろしく、1Cプログラマー。
コメントを残してください、私はあなたの意見に興味があります。

ヌル-欠測値。
nullと混同しないでください! NULLは数値ではなく、スペースと等しくなく、空の参照、未定義です。

NULLは型を形成する値です。つまり、 タイプNULLとこのタイプの単一の値があります。

NULL値は、次の状況でクエリに表示されます。
a)外部結合。対応するレコードが別のテーブルに見つかりませんでした(左側のレコードが2番目に、右側のレコードが最初に、完全なテーブルが両方にあります)
b)グループの要素の属性を参照する。その逆も同様です。
c)選択フィールドのリストでNULL(SELECT)
d)壊れたリンクの詳細を参照する

無効です SELECT演算子で使用されます(値が空であることを確認するかのように(値はNULL)):
コード1Cv 8.x
選択
WHEN値がNULLの場合結果NULLの場合
ELSE値
終わり

もう一つの例:
コード1Cv 8.x SELECT
命名法の会計残高の場合に選択します。金額残高がNULLの場合は0
ELSE命名法会計残高。数量残高AS数量残高
から

どこ

関数 ISNULL(値、ResultIf NULL) NULLでない場合は最初のパラメーターの値を返し、そうでない場合は2番目のパラメーターの値を返します。
折りたたまれたSELECT ... ENDですが、ISNULLが推奨されます。
コード1Cv 8.x
選択する
ISNULL(Directory.Nomenclature.Article、 "---")AS Article、
Reference.Nomenclature.Presentation AS Nomenclature

もう一つの例:
コード1Cv 8.x
選択する
命名法のディレクトリ。
IS NULL(NomenclatureAccountingBalance.QuantityRemainment、0)ASQuantityRemainment
から
Directory.NomenclatureASディレクトリ
LEFT JOIN Accumulation Register.AccountingNomenclature.Balances AS AccountingNomenclatureBalances
ソフトウェアNomenclatureAccountingBalances.Nomenclature = Nomenclature Directory.Link
どこ
DirectoryNomenclature.ThisGroup = FALSE
この例では、アイテムカタログのすべての要素が取得され、その後、各アイテムについて、現在の残高が累積レジスタから取得されます。 なぜなら 残高がないアイテムの場合、残高の仮想テーブルはレコードを返しません。「NomenclatureAccountRemains.Quantity」フィールドでの接続の結果として、残高があったアイテムにはNULL値があります。バランスがありません。 クエリ結果でNULL値の代わりに値0を使用するために、IS NULL()関数を使用しました。これにより、目的の置換が実行されます。

無効です次の理由でCHOICEとは異なります。
a)IS NULLの場合、クエリはより読みやすくなります(より簡単に)
b)IS NULLの場合、複雑な式がチェックされていると、一度評価されるため、より高速に動作します。
c)IS NULLの場合、置換式は、文字列(長さ)または数値(ビット幅)タイプであれば、テストされた式のタイプにキャストされます。

3値論理はSQL(True、False、NULL)で動作し、そのような比較の結果はUNKNOWNになり、1C 8.0ではFALSEに似ているため、通常の等式でNULLの値をチェックすることはできません。
ヌル<>0なので、左外部結合の場合はrefを参照してください。 残高、価格、相互決済のある相手方の表を含む命名法、そのような記録がない場合、0に等しくないNULLが存在します。最良の解決策はISNULLです。

27.06.2017

1C要求ではNULL、IS NULL()、およびIS NULL

NULLとは

ヌルリクエストの結果として、値がないことを意味します(これは空の値でも、nullでも、null参照でもありません)。
たとえば、クエリテーブルを結合した結果、結合フィールドでリンクしたときに、テーブルの1つに値が見つかりませんでした。 または、リクエストが存在しない属性(プロパティ)を参照しています。

NULLはNULLと等しくありません!

1Cクエリで、NULLのチェックを使用して選択(条件)を課したい場合、「WHEREVT。Field1= NULL」のような構造は常に戻ります。 嘘をつく! 確認するには、特殊演算子を使用します

1CリクエストにNULLがあります

NULLの値をチェックする(または値を操作する)には、次の構文「WHEREVT。Field1ISNULL」を使用する必要があります。または、別の例として、構文で使用します。 選択"CHOICE | WHEN VT.Field1 IS NULL | THEN"フィールドのNULLをチェックする機能は、1Cクエリで最もリソースを消費する機能の1つであることに注意してください。 したがって、クエリ条件で使用する場合は、そのようなチェックを置き換えることができるかどうかを検討してください。 内部接続(両方のテーブルに存在するレコードのみが選択に残るクエリの結合のタイプ)。

1Cリクエストで関数がNULL()

関数 無効です ()リクエストフィールドの欠落している値を指定された値(標準値、スタブ)に置き換えることができます。
たとえば、製品のコストに関する情報がない場合は、0(ゼロ)に等しいことを示します。「SELECT | IS NULL(WT.Price、0)AS Price | FROM Balance of Products ASWT」

結論

クエリを正しく最適に記述します。 悪い要求はブレーキとたわごとコードであるため)