2011-06-28 77 views
1

我想寫一個通用的SQL,我想要顯示是或否,如果字段數據類型是位。在這裏,我需要檢查的數據類型,如果數據類型是位,那麼它應該顯示yes或no基於值爲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比特

這種類型的輸出可以加入我的sql與information_schema.columns。如果可能的話,請給我提供正確的sql,它會給我上面的輸出。 謝謝

請指導。感謝

回答

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 
2

您可以使用情況爲:

select case bit_field when 1 then 'yes' else 'no' end as ColumnAlias 
... 
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 
1

我建議您在應用程序這樣做,而不是在數據庫中。當你將數據從SQL Server加載到應用程序中的某個對象中時,在用於數據庫位列的字段的ToString方法中處理這個問題(假設你使用.NET,否則使用類似的東西)。