需要位数据类型的帮助

时间:2011-06-28 12:44:44

标签: sql sql-server

我想写一个通用的sql,如果字段数据类型是位,我想要显示是或否。这里我需要检查数据类型,如果数据类型是位,那么它应该根据值0或1显示是或否。

select stock_code,makeid,modelid,enginesize,automatic,semiautomatic,manual from VehicleInfoForParts

所以在我上面的sql中有位类型字段是自动的,半自动的,手动的。所以在这里我需要显示是/否,但我不想硬编码任何东西。 所以请指导一下通用sql语句的最佳方法。

我可以将我的表与名为information_schema.columns的系统表连接起来,以获取字段名称,值和数据类型。 所以结果就像

Column_Name     Value               datatype

------------- ------- --------------

stock_code A112 varchar

自动1位

半自动0位

手动1位

这种类型的输出我们可以只使用information_schema.columns加入我的sql。如果可能的话请提供正确的sql,它会给我以上的输出。 感谢

请指导。感谢

4 个答案:

答案 0 :(得分:2)

您可以使用案例:

select  case bit_field when 1 then 'yes' else 'no' end as ColumnAlias
...

答案 1 :(得分:1)

我建议在您的应用程序中执行此操作,而不是在数据库中。当您将数据从SQL Server加载到应用程序中的对象时,请在用于数据库位列的字段的ToString方法中处理此问题(假设您使用.NET,如果不使用,请使用类似的东西)。

答案 2 :(得分:1)

为布尔值创建一个查找表。

CREATE TABLE dbo.Boolean
(
    Id bit PRIMARY KEY
    , YesNo varchar(3) UNIQUE
    , TrueFalse varchar(10)
)    
INSERT INTO dbo.Boolean VALUES (0, 'No', 'False')
INSERT INTO dbo.Boolean VALUES (1, 'Yes', 'True')

然后加入每个bit列的布尔表。

SELECT v.stock_code, v.makeid, v.modelid, v.enginesize
    , a.YesNo automatic, s.YesNo semiautomatic, m.YesNo manual
FROM dbo.VehicleInfoForParts v
LEFT OUTER JOIN dbo.Boolean a ON a.Id = v.automatic
LEFT OUTER JOIN dbo.Boolean s ON s.Id = v.semiautomatic
LEFT OUTER JOIN dbo.Boolean m ON m.Id = v.manual

答案 3 :(得分:0)

您可以使用隐式转换:

select stock_code,makeid,modelid,enginesize,
       CASE WHEN automatic = 1 THEN 'Yes' ELSE 'No' END as automatic,
       CASE WHEN semiautomatic = 1 THEN 'Yes' ELSE 'No' END as semiautomatic,
       CASE WHEN manual = 1 THEN 'Yes' ELSE 'No' END as manual
from VehicleInfoForParts