0

xml ファイルを MySQL にインポートしています。私は持っています:

つまり、価格形式が間違っています。私の xml 価格ノードには、複雑な価格フォーマットが含まれています。挿入前にいくつかのトリガーを記述して、それらを 1 つの UK 形式にする方法は 1 つだけです:10,000.00

私の価格ノードがあります:

<price>10 100</price>
<price>10.000,24</price>
<price>10,000.34</price>
<price>10,000,00</price>
<price>10.000.00</price>
<price>1.000.00</price>

それらのすべてが異なり、セパレーターが含まれているもの、含まれていないもの、間違っているものがあるため、どうすればよいかわかりません....

4

1 に答える 1

0

すべての価格が不安定なので、ファイルを前処理する必要があると思います。また、xx,xxx.xx は有効な mysql float(double) ではありません。値が引用符で囲まれている場合は文字列であり、引用符で囲まれていない場合は、コンマが列/フィールドの区切りとして機能します。

  • SELECT "50,000.00";
    • 文字列「50,000.00」を返します
  • SELECT 50,000.00;
    • 2 つの列を返します。1 つは 50 で、もう 1 つは 0.00 です。

前処理については、php で価格を取得したら、このようなことを行うことができます

if (substr($price, -3, 1) == '.'){
  // Properly formated, just need to remove the commas
  $price = str_replace(',','',$price);
} else if (substr($price, -3, 1) == ','){
  // Periods before commas.
  // Remove all of the '.', then swap the ending ',' for a '.' 
  $price = str_replace(array('.', ','), array('', '.'), $price);
} else {
  // Price is in an odd format
  // Two options:
  //  Remove product entirely
  //  or
  //  Remove all non-numeric values from price (assumes no negative prices)
  $price = preg_replace('/[^0-9]/', '', $price);
}
于 2013-03-25T18:07:17.513 に答える