列のデータ型のキャストに問題がありTEXT
ます。
カスタムCSVファイルからすべてのデータをアップロードする必要があります。適切なデータ型は言うまでもなく、期待するすべての列を取得できるという保証はないため、すべての列が TEXT 型であるテーブルから始めて、空白の場所に空の文字列を配置します。
元。表はこんな感じ
CREATE TABLE tbl1 (col1 テキスト、col2 テキスト、col3 テキスト);
tbl1
ファイルからロードした後、これを実行します。
SELECT * FROM tbl1;
結果を選択:
'1'、'文字列 1'、'2.0'
'2'、'文字列 2'、'3.14'
'3'、'文字列 3'、'6.77776'
'h','Stringh', 'hh'
''、'弦'、 ''
tbl1
ここで、データを取得し、それを使用してこのテーブルにデータを入力したいと考えています。
CREATE TABLE tbl2 (col1 INTEGER, col2 TEXT, col3 REAL);
と、こんな感じでやってみます。
INSERT INTO tbl2 SELECT CAST(tbl1.col1 as INTEGER), tbl1.col2, CAST(tbl1.col3 AS REAL) FROM tbl1;
その後、これを実行します。
SELECT * FROM tbl2;
結果を選択:
1,'文字列1', 2.0
2,'文字列2', 3.14
3,'文字列3', 6.77776
0,'ストリングス', 0
0,'文字列', 0
私が本当に望んでいるのは、「良い」キャストと見なされるものを取得して挿入しtbl2
、「悪い」キャストと見なされるすべての値を取得して、次のような「tbl3」に配置することです。
CREATE TABLE tbl3 (col1 TEXT, col2 TEXT, col3 TEXT, REASON_FOR_REJECTION TEXT);
tbl3
レポートと、場合によっては不良データのトラブルシューティング用です。
このデータを挿入する前に C++ で前処理する必要がありますtbl2
か、それとも SQLite は「不正な」キャストをキャッチできる何らかのクエリ関数をサポートしていますか?
アップデート:
この末尾に CL. のクエリを追加することで、どのレコードに「不適切な」キャストが含まれているかを識別し、クリーンアップしtbl2
て不適切なデータ行を に追加することができましたtbl3
。