varcharセルから数値を抽出し、それらを使用して計算を行い、結果でセルを更新することは可能ですか?
すなわち
列のセルの値は「24a10b」です。
24、10を取り、bに注意してください
24 * 10=240を実行します
abがあった場合は1を引く
そのフィールドに239を格納します(「24a10b」を「239」に変更します)
テーブル内のすべての行でこれを行います
varcharセルから数値を抽出し、それらを使用して計算を行い、結果でセルを更新することは可能ですか?
すなわち
列のセルの値は「24a10b」です。
24、10を取り、bに注意してください
24 * 10=240を実行します
abがあった場合は1を引く
そのフィールドに239を格納します(「24a10b」を「239」に変更します)
テーブル内のすべての行でこれを行います
これはあなたの例で機能します:
SELECT
(col * SUBSTRING_INDEX(col, 'a', -1)) - (RIGHT(col, 1)='B')
FROM
op
こちらのフィドルをご覧ください。
col
あなたの価値です'24a10 b'
SUBSTRING_INDEX(col, 'a', -1)
'a'の右側にある文字列の部分を返します。'10 b'
'24a10 b' * '10 b'
文字列を整数に自動的にキャストするの乗算24*10
RIGHT(col,1)='B'
colがabで終わる場合はtrue(= 1)、それ以外の場合はfalse(0)それは確かに実行できますが、SQLはアトミック値の公理(つまり、第一正規形)を中心に設計されています。フィールドを分割する必要はほとんどありません。適切に設計されたデータベースで使用する必要があるのは、日付フィールドの月または年だけで作業したい日付を使用する場合のみです。確かに、このコアコンセプトに違反する、一部の馬鹿が設計したデータベースを見つけることはできますが、これらの設計をどのように処理するかを理解することから始めるのは悪い考えです。
さらに、「そのセル239に格納する」の最後のステップでは、データベースをスプレッドシートのように表示しているように思われます。彼らはそうではありません。データベースのもう1つのコアコンポーネントは、行の順序は重要ではないということです。一方、フィールドは常に同じ行の他のフィールドに関連しています。フィールドの1つの値を、そのレコードのIDフィールドが239であるものに設定することもできますが、通常、レコードが239番目であるという事実を気にすることはありません。
そうは言っても、これがあなたが望むことをするクエリです:
仮定:フィールドの形式は「11a22b」です。つまり、2桁の数字、文字、さらに2桁の数字、場合によってはスペースと文字「b」が続きます。
SELECT CAST(SUBSTRING(Value,1,2) AS INT)
* CAST(SUBSTRING(Value,3,2) AS INT)
+ CASE RIGHT(Value,1) WHEN 'b' THEN -1 ELSE 0 END
FROM MyTable
誰かが似たようなものを探している場合、完全な答えは次のようになります。
UPDATE `table`
SET cell = (
CAST( SUBSTRING( cell, 1, 2 ) AS UNSIGNED )
*
CAST( SUBSTRING( cell, 4, 2 ) AS UNSIGNED )
-
(SUBSTRING( latitud, 7, 1 ) = 'b')
)
WHERE 1;