0

私は比較的 MySQL/SQL に不慣れで、これがこのサイトへの最初の投稿です。

.xlsx ファイルのコピーを .csv ファイルとして保存しました。その .csv ファイルからテーブルにデータをロードしようとしています。次のエラー メッセージが表示されます。

0 行が影響を受け、64 個の警告: 1265 行 1 の列 'ptsg' のデータが切り捨てられました

エラーログはこちら: http://pastie.org/private/byzcwjtslxpfjyhoog2g

クエリはこちら: http://pastie.org/private/tyzkbyqnuwpsafrjxcetq#6,8,12-13

「ptsg」列のデータ型をいじって、浮動小数点から小数に変更してみましたが、うまくいきませんでした。

その列に挿入されるデータは最大 4 桁の有効数字であり、「100」または「100.2」のような形式を取り、小数点以下に最大 1 つの数値が続きます。

「0.347」などのデータで正常に機能するフロート列が他にもあります。データが切り捨てられるのはなぜですか?

.csv 形式の 3 行のデータを次に示します。

2013ナゲッツ,2013,1,デンバー,ナゲッツ,デンバー ナゲッツ,82,19705,3145,6613,0.476,662,1704,0.388,1859,2429,0.765,791,2652,3443,1813,605,352,1157,1719,881 ,107.5
2013 ニックス,2013,2,ニューヨーク,ニックス,ニューヨーク ニックス,82,19780,3140,6867,0.457,765,2081,0.368,1689,2087,0.809,847,2470,3317,1757,625,475,1123,1743 ,8734,106.5
2013ロケッツ,2013,3,ヒューストン,ロケッツ,ヒューストン ロケッツ,82,19880,3170,6975,0.454,677,1843,0.367,1668,2083,0.801,962,2549,3511,1955,581,371,1110,1641,8685 ,105.9
2013サンズ,2013,4,フェニックス,サンズ,フェニックス サンズ,82,20005,3219,6844,0.47,701,1857,0.377,1472,1939,0.759,821,2478,3299,1945,545,357,1169,1666,8611 ,105

クエリからの出力:SHOW WARNINGS;

注 1265 行 1 の列 'ptsg' のデータが切り捨てられました
注 1265 行 2 の列 'ptsg' のデータが切り捨てられました
注 1265 行 3 の列 'ptsg' のデータが切り捨てられました
注 1265 行 5 の列 'ptsg' のデータが切り捨てられました
...

アップデート:

peterm のおかげで、列「ptsg」に「10 進数」データ型を間違って使用していることに気付きました。(10,1) の代わりに DECIMAL(10,0) を使用しました。64 個の警告が 1 個に減りました。

0 行影響、1 警告: 1366 不正な 10 進値: 行 1246 の列 'ptsg' の ' ' レコード: 1334 削除: 0 スキップ: 1334 警告: 1

行 1246 には、ptsg の空白があります。上記のクエリ (具体的には、ptsg = NULLIF(@vptsg,''))はどうすればよいでしょうか? 行 1246 の「NULL」を ptsg 列に挿入します。テーブルを確認したところ、ptsg 列 DECIMAL(10,1) で NULL 値を許可する必要があります。これは、"NN" または "Not Null" チェックボックスをオフのままにしたためです。

行 1246 は次のようになります: 1955Bullets,1955,9,Baltimore,Bullets,Baltimore Bullets,,,,,,,,,,,,,,,,,,,

私は別の愚かな間違いを犯していますか?

4

1 に答える 1

0

csv ファイルの各行で、最後の列の後にコンマを追加してみてください。(または、テストとして数行だけ。)

問題は、csv の最後のフィールドがコンマで終了していないことだと思います。これにより、 に NULL が割り当てられてい@vptsgます。

ファイルが DOS 形式の場合は、次のように指定することもできます。

  LINES TERMINATED BY '\r\n' 
于 2013-11-09T05:49:29.693 に答える