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
SQL [Conversion to bool]
提问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
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)