Sql-Server
我可以在沒有函式的情況下將整數轉換為 base-2
這裡有點挑戰。我正在使用該表
ReportServer.Schedule
,並且有一列名為DaysOfWeek
. 我可能在這裡沒有使用正確的術語,但這是一個整數,可以從中得出 SSRS 訂閱設置為執行的星期幾。每天分配一個編號,如下所示:
- 週日:1
- 星期一:2
- 週二:4
- 星期三:8
- 星期四:16
- 週五:32
- 週六:64
訂閱設置為執行的總天數是此列中的數字。因此,週一至週五執行的訂閱在此列中的值為
62
。我想要的最終結果是一個視圖,它根據這個數字為每一天派生 T/F 標誌,以便我每天都有一個列。我目前正在探索的方法是將這個整數轉換為 base-2,這樣我就可以將它轉換為 varchar 並解析出日期。在此範例中,結果將為 111110。
最後的轉折 - 我沒有能力在這個數據庫中創建函式或儲存過程,所以我強烈希望在一個
SELECT
語句中解決這個問題……(如果迫在眉睫,我將移動原始數據並在單獨的數據庫中使用一個函式 - 並在網上找到了一些。)
除非我完全誤解了你的問題,否則下面的 T-SQL 應該這樣做(如果這不是你要找的,請告訴我)。它利用按位運算符提取這些天的位遮罩:
-- <TEST DATA> create table DayTable ( id int identity(1, 1) not null, DayMask tinyint not null ) go insert into DayTable values ( 62 ), ( 12 ) -- </TEST DATA> select case when DayMask & 1 > 0 then 1 else 0 end as Sunday, case when DayMask & 2 > 0 then 1 else 0 end as Monday, case when DayMask & 4 > 0 then 1 else 0 end as Tuesday, case when DayMask & 8 > 0 then 1 else 0 end as Wednesday, case when DayMask & 16 > 0 then 1 else 0 end as Thursday, case when DayMask & 32 > 0 then 1 else 0 end as Friday, case when DayMask & 64 > 0 then 1 else 0 end as Saturday from DayTable