In [3]: l = [1,2,3,4,5]
In [4]: b = bytes(l)
In [5]: b
Out[5]: b'\x01\x02\x03\x04\x05'
In [6]: ba = bytearray(l)
In [7]: ba
Out[7]: bytearray(b'\x01\x02\x03\x04\x05')
ちなみに、bytesはイミュータブルでbytearrayはミュータブルです。
In [8]: b[2] = 0
Traceback (most recent call last):
File "<ipython-input-107-088d74b352b8>", line 1, in <module>
b[2] = 0
TypeError: 'bytes' object does not support item assignment
In [9]: b
Out[9]: b'\x01\x02\x03\x04\x05'
In [10]: ba[2] = 0
In [11]: ba
Out[11]: bytearray(b'\x01\x02\x00\x04\x05')
In [12]: import struct
In [13]: b[:2]
Out[13]: b'\x01\x02'
In [14]: struct.unpack('>H',b[:2])
Out[14]: (258,)
In [15]: struct.unpack('<H',b[:2])
Out[15]: (513,)
SELECT 取引番号||'-'||ROW_NUMBER() OVER (PARTITION BY 取引番号, 取引日, 商品コード ORDER BY 取引番号, 取引日, 商品コード) 取引
,取引番号
,取引日
,商品コード
,数量
FROM 取引
WHERE 取引日 = '20-05-27'
ORDER BY 1;
実行結果
これで、取引を分割することができました。
スクリプト
今回使用したスクリプトです。
CREATE TABLE 取引 ( 取引番号 NUMBER, 取引日 DATE, 商品コード NUMBER, 数量 NUMBER);
INSERT INTO 取引 (
SELECT 1, '20-05-27', 1, 1 FROM DUAL UNION ALL
SELECT 1, '20-05-27', 2, 1 FROM DUAL UNION ALL
SELECT 1, '20-05-27', 3, 1 FROM DUAL UNION ALL
SELECT 1, '20-05-27', 4, 2 FROM DUAL UNION ALL
SELECT 2, '20-05-27', 2, 1 FROM DUAL UNION ALL
SELECT 2, '20-05-27', 2, 3 FROM DUAL UNION ALL
SELECT 2, '20-05-27', 3, 4 FROM DUAL UNION ALL
SELECT 2, '20-05-27', 4, 2 FROM DUAL UNION ALL
SELECT 2, '20-05-27', 3, 3 FROM DUAL UNION ALL
SELECT 3, '20-05-27', 1, 2 FROM DUAL UNION ALL
SELECT 3, '20-05-27', 1, 1 FROM DUAL UNION ALL
SELECT 3, '20-05-27', 1, 3 FROM DUAL
);
COMMIT;
SELECT 取引番号||'-'||ROW_NUMBER() OVER (PARTITION BY 取引番号, 取引日, 商品コード ORDER BY 取引番号, 取引日, 商品コード) BREAK
,取引番号
,取引日
,商品コード
,数量
FROM 取引
WHERE 取引日 = '20-05-27'
ORDER BY 1
;