我想写一个通用的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,它会给我以上的输出。 感谢
请指导。感谢
答案 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