20

非常に単純なクエリを実行していますが、一部の結果では、1 つのフィールドの値が null です。値がnullの場合、その値を「文字列」に設定するにはどうすればよいですか?

何かのようなもの

SELECT RegName,
    RegEmail,
    RegPhone,
    RegOrg,
    RegCountry,
    DateReg,
    (Website IS NULL? 'no website' : Website) AS WebSite
FROM RegTakePart
WHERE Reject IS NULL

SQLサーバー2005で実行されます

ありがとう

4

6 に答える 6

37

以下を使用します。

SELECT RegName,
       RegEmail,
       RegPhone,
       RegOrg,
       RegCountry,
       DateReg,
       ISNULL(Website,'no website')  AS WebSite 
FROM   RegTakePart 
WHERE  Reject IS NULL

または、@ Lieven は次のように述べています。

SELECT RegName,
       RegEmail,
       RegPhone,
       RegOrg,
       RegCountry,
       DateReg,
       COALESCE(Website,'no website')  AS WebSite 
FROM   RegTakePart 
WHERE  Reject IS NULL

COALESCE のダイナミクスは、より多くの引数を定義できることです。つまり、最初が null の場合は 2 番目を取得し、2 番目が null の場合は 3 番目を取得します。

于 2013-10-09T10:00:17.290 に答える
10

上述のように、合体溶液が好ましい。追加の利点として、次のように、「派生」値と選択値に対して合体を使用できます。

SELECT
       {stuff},
       COALESCE( (select count(*) from tbl where {stuff} ), 0 )  AS countofstuff
FROM
       tbl
WHERE
       {something}

「iif」または「case」を使用すると、インラインを繰り返す必要がありますが、合体ではそうしません。その戻り値で「null」の結果を回避できます...

于 2016-04-28T14:12:19.837 に答える
9

使用CASE:

SELECT regname, 
       regemail, 
       regphone, 
       regorg, 
       regcountry, 
       datereg, 
       CASE 
         WHEN website IS NULL THEN 'no website' 
         ELSE website 
       END AS WebSite 
FROM   regtakepart 
WHERE  reject IS NULL 

またはCOALESCE:

....
COALESCE(website, 'no website') AS WebSite 
....
于 2013-10-09T10:00:50.020 に答える
2

を使用するだけISNULL(website, 'yourstring')です。

したがって、クエリは次のようになります。

SELECT RegName,
    RegEmail,
    RegPhone,
    RegOrg,
    RegCountry,
    DateReg,
    ISNULL(website, 'no website') AS WebSite
FROM RegTakePart
WHERE Reject IS NULL
于 2013-10-09T10:00:30.230 に答える
2

他のユーザーへの問題を回避するには:

問題 1 + 解決策:

ISNULL関数を Access データベースで使用する場合は、AccessISNULLに実装されている関数が SQL Server の実装とは異なることに注意してください。

アクセスISNULL関数は常にTRUEorを返しますFALSE。そのため、使用法に合わせてカスタムIIF関数を使用する必要がありますISNULL

問題 2 + 解決策:

さらに、列の別名と同じフィールド名を使用する場合、Access データベース エンジンは、フィールドへの「循環参照」があることを通知する可能性があります。

したがって、Alias と同じフィールド名を使用する必要がある場合は、フィールド名の前にテーブル名を追加するだけです。(例: RegTakePart.Website単に の代わりに使用する必要がありますWebsite)。Websiteこのようにして、列のエイリアス名として自由に使用できます。

これら 2 つの問題を回避するためのグローバルに機能する (およびテスト済みの) SQL クエリは次のとおりです。

SELECT RegName,
    RegEmail,
    RegPhone,
    RegOrg,
    RegCountry,
    DateReg,
    IIF(RegTakePart.Website IS NULL, 'no website, RegTakePart.Website) AS Website
FROM RegTakePart
WHERE Reject IS NULL
于 2016-10-15T09:07:03.007 に答える