SQL [转换为布尔值]

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/2115546/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-01 05:10:14  来源:igfitidea点击:

SQL [Conversion to bool]

sqlsql-servertsqlstored-procedurescasting

提问by cnd

C++Builder ADOQuery SQLServer

C++Builder ADOQuery SQLServer

I'm using a stored procedure with this select

我正在使用带有此选择的存储过程

SELECT  Name,
        COALESCE(
        (
        SELECT  TOP 1 0
        FROM    TbUserParam
        WHERE   TbUserParam.ID_User = @ID_User
                AND TbUserParam.ID_Param = CfgListParIzm.ID_ListParIzm
        ), 1) Visi
FROM    CfgListParIzm
WHERE   CfgListParIzm.ID_ListGroupParIzm = @ID_ListGroupParIzm

Stuff about this query

关于这个查询的东西

in my query with SQL string :

在我的 SQL 字符串查询中:

FlowClientHardQ  :ID_User, :ID_ListGroupParIzm

then DataSource and DBGrid with CheckBox fields. Source

然后是带有 CheckBox 字段的 DataSource 和 DBGrid。来源

So I need a bool (or bit) field there from my ADO Query. How / Where can I convert it ?

所以我需要一个来自我的 ADO 查询的 bool(或位)字段。如何/在哪里可以转换它?

Thank you.

谢谢你。

回答by gbn

Cast to bit?

扔到位?

SELECT  Name,
        CAST(
        COALESCE(
        (
        SELECT  TOP 1 0
        FROM    TbUserParam
        WHERE   TbUserParam.ID_User = @ID_User
                AND TbUserParam.ID_Param = CfgListParIzm.ID_ListParIzm
        ), 1) as bit) Visi
FROM    CfgListParIzm
WHERE   CfgListParIzm.ID_ListGroupParIzm = @ID_ListGroupParIzm

But can you not rewrite the query thus to avoid the subquery:

但是你不能重写查询从而避免子查询:

SELECT
    C.Name,
    CAST(CASE WHEN T2.ID_Param IS NULL THEN 0 ELSE 1 END as bit) AS Visi
FROM
    CfgListParIzm C
    LEFT JOIN
    (
    SELECT
        T.ID_Param
    FROM
        TbUserParam T
    WHERE
        T.ID_User = @ID_User
    ) T2 On T2.ID_Param = C.ID_ListParIzm
WHERE
    C.ID_ListGroupParIzm = @ID_ListGroupParIzm

回答by Liao

Maybe a CAST to BIT?

也许是 CAST 到 BIT?

SELECT CAST(COALESCE(NULL,1) AS BIT)

UPDATEYou could use is ISNULL() as well. SELECT CAST(ISNULL(NULL,1) AS BIT)

更新您也可以使用 is ISNULL() 。 SELECT CAST(ISNULL(NULL,1) AS BIT)