私は謝罪していないようです。私はT-SQLを3年ほどしか書いていませんが、ほとんどが独学です。私の仕事では、月の日の値をビットマスクで保存します。例えば。 1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxは1に変換され、12345678910111213141516171819202122232425262728293031は2147483647に変換されます。int値を数値と 'x'文字を含むvarchar(64)に変換します。私は別のpostから次のコードをいくつかの微調整と似ていますが、データを後方に提供します(左から右への代わりに右から左へ)。ビット単位のint値を月の日のマスクに変換する
declare @i int /* input */
set @i = 42
declare @result varchar(32) /* SQL Server int is 32 bits wide */
set @result = ''
while 1 = 1 begin
select @result = convert(char(1), @i % 2) + @result,
@i = convert(int, @i/2)
if @i = 0 break
end
select Replace(@result,'0','X')
また、すべての文字を提供するわけではありません。 31文字すべてを埋め戻す必要があります。
私もRob Farley's Simple Recursive CTEでプレイしました。
"12345678910111213141516171819202122232425262728293031は2147483647に変換されます" - どのように?確かにビットマスクは1と0だけでしょうか? – Phil
@Phil 53文字の文字列 '12345678910111213141516171819202122232425262728293031'には、月の31日がすべて連結されています。バイナリ= '2147483647'の' 1111111111111111111111111111111'を10進数で表します。 –
ああ、そうだ。すぐには分かりませんでした! – Phil