Open5

DuckDB

Seiki TokunagaSeiki Tokunaga

Excelのシート(日本語)含むやつもサクッと読めてしまう。(すごい)

INSTALL spatial;
LOAD spatial;
SELECT Field6 FROM st_read('XXX.xlsx', layer='2018年度')

結果サンプル

┌─────────┬──────────────────────┬─────────┬───────────────────┬───┬─────────┬─────────┬─────────┬─────────┬─────────┐
│ Field1  │        Field2        │ Field3  │      Field4       │ … │ Field19 │ Field20 │ Field21 │ Field22 │ Field23 │
│ varchar │       varchar        │ varchar │      varchar      │   │ varchar │ varchar │ varchar │ varchar │ varchar │
├─────────┼──────────────────────┼─────────┼───────────────────┼───┼─────────┼─────────┼─────────┼─────────┼─────────┤
│         │                      │         │                   │ … │         │         │         │         │         │
│         │ 2018年度(認定申請…  │         │                   │ … │         │         │         │         │         │
│         │ 表2-4 性・年齢階…   │         │                   │ … │         │         │         │         │         │
│         │                      │         │                   │ … │         │         │         │         │         │
│         │ 性別                 │         │ 年齢階級別        │ … │         │         │         │         │         │
│         │                      │         │                   │ … │         │         │         │         │         │
│         │ 総数                 │         │                   │ … │         │         │         │         │         │
│         │ 男性                 │         │ 総数              │ … │         │         │         │         │         │
│         │                      │         │ 65歳未満          │ … │         │         │         │         │         │
│         │                      │         │ 65-69歳           │ … │         │         │         │         │         │
│         │                      │         │ 70-74歳           │ … │         │         │         │         │         │
Seiki TokunagaSeiki Tokunaga

CAST関数もある。

 SELECT CAST(Field6 as INTEGER) FROM st_read('001180438.xlsx', layer='2018年度_表2-4') WHERE Field4 Like '%65-69歳%';
┌─────────────────────────┐
│ CAST(Field6 AS INTEGER) │
│          int32          │
├─────────────────────────┤
│                   54830 │
│                   44860 │
└─────────────────────────┘

https://duckdb.org/docs/sql/expressions/cast.html

ただ、CAST失敗するとエラーになってしまうので、CASTした後に例えば数値比較する際にはTRY_CASTを使うのが良さそう。

SELECT TRY_CAST(Field6 as INTEGER) as TOTAL FROM st_read('001180438.xlsx', layer='2018年度_表2-4') WHERE TOTAL > 5000;

TRY_CAST can be used when the preferred behavior is not to throw an error, but instead to return a NULL value. TRY_CAST will never throw an error, and will instead return NULL if a cast is not possible.