8ビット列の複数の列があります(例: '01001000')。私は、各列の文字列を各ビットごとに1つずつ8列に分割したいと考えています。SQL Server列のバイナリ文字列を別々の列のビットに分割します。
substring(str, n, 1)
何度もコピーして貼り付けるよりクリーンな方法がありますか?
注記次に、別の列でグループ化し、それぞれのビット位置ごとに1の数を数えます。理解を深めるために。
8ビット列の複数の列があります(例: '01001000')。私は、各列の文字列を各ビットごとに1つずつ8列に分割したいと考えています。SQL Server列のバイナリ文字列を別々の列のビットに分割します。
substring(str, n, 1)
何度もコピーして貼り付けるよりクリーンな方法がありますか?
注記次に、別の列でグループ化し、それぞれのビット位置ごとに1の数を数えます。理解を深めるために。
あなたの現在のテーブルからこの新しいテーブルにINSERT INTO ... SELECT
を行い、その後、8ビット列を持つ新しいテーブルを作成します。
INSERT INTO newTable (b1, b2, b3, b4, b5, b6, b7, b8)
SELECT
CAST(SUBSTRING(col, 1, 1) AS BIT),
CAST(SUBSTRING(col, 2, 1) AS BIT),
CAST(SUBSTRING(col, 3, 1) AS BIT),
CAST(SUBSTRING(col, 4, 1) AS BIT),
CAST(SUBSTRING(col, 5, 1) AS BIT),
CAST(SUBSTRING(col, 6, 1) AS BIT),
CAST(SUBSTRING(col, 7, 1) AS BIT),
CAST(SUBSTRING(col, 8, 1) AS BIT)
FROM oldTable
私はこれが役立つかもしれないと思う:
CREATE TABLE tab123(B1 INT, B2 INT, B3 INT, B4 INT, B5 INT, B6 INT, B7 INT, B8 INT)
DECLARE @TAB VARCHAR(100) = '01001000',
@VALUES VARCHAR(MAX) = 'INSERT INTO TAB123 SELECT '
SELECT @VALUES = @VALUES + VAL
FROM
(
SELECT SUBSTRING(@TAB, NUMBER, 1) + ',' VAL
FROM master.dbo.spt_values
WHERE TYPE = 'P' AND NUMBER BETWEEN 1 AND LEN(@TAB)
) AS A
SELECT @VALUES = SUBSTRING(@VALUES, 1, LEN(@VALUES) - 1)
EXEC (@VALUES)
SELECT * FROM tab123
DROP TABLE tab123
をうーん、私はこれがあると思います適切なトラックではなく、いくつかの列に役立ち、より大きなクエリにネストされていれば、それを関数に変換する必要があります。どうすればいい? – user3496060