Sql-Server

我可以在沒有函式的情況下將整數轉換為 base-2

  • February 2, 2017

這裡有點挑戰。我正在使用該表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

引用自:https://dba.stackexchange.com/questions/18277