2017-05-26 10 views
1

こんにちは私は、SQLサーバーのBITが真、偽、および未知を知っていた。例えば、比較1 > NULLは、unknownをもたらす。SQL Serverのブール値でUNKNOWNにアクセスするには?

間接的に確認することができます:x is null or y is nullの場合、比較x > yunknownである必要があります。

unknownに直接アクセスする手段はありますか?これは動作します

select * 
into #t 
from (
    SELECT 1 as [x], 1 as [y] UNION ALL 
    SELECT 1 as [x], 2 as [y] UNION ALL 
    SELECT 1 as [x], NULL as [y] 
) as a 


SELECT * 
from #t 
--x y 
--1 1 
--1 2 
--1 NULL 

select * 
    ,/* ???? */ as [is x > y] 
from #t 
--want to have: 
--x y  is x > y 
--1 1  0 
--1 2  0 
--1 NULL unknown 
+2

「不明」は「NULL」と表示されます。 –

答えて

1

例えば:

select * 
into #t 
from (
    SELECT 1 as [x], 1 as [y] UNION ALL 
    SELECT 1 as [x], 2 as [y] UNION ALL 
    SELECT 1 as [x], NULL as [y] 
) as a 


SELECT * 
from #t 
--x y 
--1 1 
--1 2 
--1 NULL 

select *, 
    case 
     when x > y then '1' 
     when x is null or y is null then 'unknown' 
     else '0' 
     end as [is x > y] 
from #t 

--x y is x > y 
--1 1 0 
--1 2 0 
--1 NULL unknown 

-- Don't forget to delete your temp table when done. 
drop table #t 
+0

ありがとうございます@チャックはそれを落とす必要はありません一時テーブルの考えですか? –

+0

こんにちは張、私はそれがベストプラクティスだと思う、ここを参照してください:https://social.msdn.microsoft.com/Forums/sqlserver/en-US/522d302a-857f-4730-b49f-cca7fb236912/is-ストアドプロシージャの中で削除する必要がありますか?forum = transactsql – Chuck

+0

@YZhang、これまでにこれが動作しましたか? – Chuck

0

をまた他が必要になります、最後の列の値として、「不明」文字列を返すようにIS NULL述語とCASE表現をする必要があります'unknown'文字列リテラルをintに暗黙的に変換するのを避けるために、 '0'と '1'の値をvarcharリテラルとして使用します。

SELECT 
     x 
    , y 
    , CASE WHEN x > y THEN '1' WHEN x <= y THEN '0' ELSE 'unknown' END AS [is x > y] 
FROM #t; 
関連する問題