「3/4」や「5/9」などの文字列と、「1/2 km」や「3/4 度」などの文字列が mysql 列に格納されています。
それらを数値に変換したいと思います。最初のケースでは、3/4 ==> .75 です。
より複雑な 2 番目のケースでは、"km" や "degree" などの単位を取り除いて "1/2 km" ==> 0.5 にします。
「3/4」や「5/9」などの文字列と、「1/2 km」や「3/4 度」などの文字列が mysql 列に格納されています。
それらを数値に変換したいと思います。最初のケースでは、3/4 ==> .75 です。
より複雑な 2 番目のケースでは、"km" や "degree" などの単位を取り除いて "1/2 km" ==> 0.5 にします。
これはクエリで行うべきことではないと思いますが、保存時に計算し、計算された値をテーブルのテキスト値の隣に保存します。
ただし、必要に応じて、いくつかの文字列関数を使用して値をスライスし、自分で計算することができます。
select
x.Multiplier / x.Divider as Result
from
(select
cast( substr( t.String,
1,
locate('/', t.String) - 1)
as decimal)
as Multiplier,
cast( substr( t.String,
locate('/', t.String) + 1,
locate( ' ',
concat(t.String, ' ')))
as decimal)
as Divider
from
YourTable t) x
ただし、データが「無効」の場合、これにより問題が発生する可能性があることに注意してください。「0/0 km」と表示されている場合は失敗する可能性があり、「ここにデータがありません」が含まれている場合も失敗する可能性があります。
PHP を使用すると、次のことができます。
// assuming $vals has the values from the database
$converted = array();
foreach ($vals as $key => $val) {
preg_match("/^(\\d+)\\/(\\d+)/", $val, $matches)
if (count($matches) > 2) {
$numerator = (int) $matches[1];
$denominator = (int) $matches[2];
$converted[$key] = (float) $numerator / $denominator;
}
}