在xml导入上插入之前,mysql价格字段分隔符更改

时间:2013-03-25 17:10:03

标签: mysql insert separator

我正在将xml文件导入MySQL。  我有一个:  警告:number_format()期望参数1为double,在第224行的/home/dailyadc/public_html/include/form.php中给出字符串

这意味着价格格式错误。我的xml价格节点包含凌乱的价格格式。我只有一种方法可以在插入之前编写一些触发器,使它们只采用一种英国格式: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>

我不知道怎么做,因为它们都不同,其中一些包含分隔符,一些不包含,一些包含错误....

1 个答案:

答案 0 :(得分:0)

我认为您将需要预处理您的文件,因为您的所有价格都很不稳定。另外,xx,xxx.xx不是有效的mysql float(double),如果引用该值,则为字符串,如果不加引号,则逗号充当列/字段分隔符。

实施例

  • SELECT "50,000.00";
    • 返回字符串“50,000.00”
  • SELECT 50,000.00;
    • 返回两列,一列= 50,另一列= 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);
}