sql >> データベース >  >> RDS >> Mysql

欠落しているFLOAT値をNULLでSQLに格納する方法

    問題は、MySQLが空のフィールドをどのように解釈するかです。 vs欠落フィールド LOADDATAINFILEのドキュメントから ...

    この場合、MySQLはそれをと見なしているようです。 。これは、show warningsから確認できます。 。

    mysql> show warnings;
    +---------+------+------------------------------------------------------------+
    | Level   | Code | Message                                                    |
    +---------+------+------------------------------------------------------------+
    | Warning | 1265 | Data truncated for column 'customerReviewAverage' at row 2 |
    | Warning | 1265 | Data truncated for column 'customerReviewAverage' at row 3 |
    +---------+------+------------------------------------------------------------+
    2 rows in set (0.00 sec)
    

    一方、末尾のカンマを削除してフィールドが欠落している ...

    19658847,Glanzlichter - CD,,12.99,5.0
    19658856,Glanzlichter - CD,,6.99
    19658865,Glanzlichter - CD,,8.99
    1965886,Beach Boys '69 - CASSETTE,,6.99,4.5
    

    次に、データはnullに設定されます。

    mysql> show warnings;
    +---------+------+--------------------------------------------+
    | Level   | Code | Message                                    |
    +---------+------+--------------------------------------------+
    | Warning | 1261 | Row 2 doesn't contain data for all columns |
    | Warning | 1261 | Row 3 doesn't contain data for all columns |
    +---------+------+--------------------------------------------+
    
    mysql> select * from products;   
    +----------+---------------------------+-------------+--------------+-----------------------+
    | sku      | name                      | description | regularPrice | customerReviewAverage |
    +----------+---------------------------+-------------+--------------+-----------------------+
    | 19658847 | Glanzlichter - CD         | NULL        |        12.99 |                     5 |
    | 19658856 | Glanzlichter - CD         | NULL        |         6.99 |                  NULL |
    | 19658865 | Glanzlichter - CD         | NULL        |         8.99 |                  NULL |
    |  1965886 | Beach Boys '69 - CASSETTE | NULL        |         6.99 |                   4.5 |
    +----------+---------------------------+-------------+--------------+-----------------------+
    4 rows in set (0.00 sec)
    

    @customerReviewAverageに対して同じことを行う @descriptionは MySQL5.7で私のために働いた。

    LOAD DATA
      LOCAL INFILE 'product.csv'
      INTO TABLE Products
      FIELDS TERMINATED BY ','
      ENCLOSED BY '"'
      LINES TERMINATED BY '\n'
      (sku, name, @description, regularPrice, @customerReviewAverage)       
      SET description           = IF(@description='',NULL,@description),
          customerReviewAverage = IF(@customerReviewAverage='',NULL,@customerReviewAverage);
    
    mysql> select * from products;
    +----------+---------------------------+-------------+--------------+-----------------------+
    | sku      | name                      | description | regularPrice | customerReviewAverage |
    +----------+---------------------------+-------------+--------------+-----------------------+
    | 19658847 | Glanzlichter - CD         | NULL        |        12.99 |                     5 |
    | 19658856 | Glanzlichter - CD         | NULL        |         6.99 |                  NULL |
    | 19658865 | Glanzlichter - CD         | NULL        |         8.99 |                  NULL |
    |  1965886 | Beach Boys '69 - CASSETTE | NULL        |         6.99 |                   4.5 |
    +----------+---------------------------+-------------+--------------+-----------------------+
    4 rows in set (0.00 sec)
    



    1. MysqlのGroupByとOracleのGroupbyの動作が異なる理由

    2. MySQLはDATETIMEに挿入します:ISO ::8601形式を使用しても安全ですか?

    3. SQLServer2017でストアドプロシージャを作成する

    4. SQL算術演算子