文字列列が2つの数値の間にある場合、フィールドの値を更新しようとしています。
UPDATE SAMPLE.EXAMPLE
SET modNum = CONCAT(modNum,"26")
WHERE modNum NOT LIKE '%26%'
AND (procKey BETWEEN 90000 AND 99123 OR procKey = 77444);
残念ながら、エラーが発生します。
エラーコード:1292。切り捨てられた誤ったDOUBLE値: '4123F'
選択を行うと期待どおりの結果が得られるので、驚いています。
SELECT *
FROM SAMPLE.EXAMPLE
WHERE modNum NOT LIKE '%26%'
AND (procKey BETWEEN 90000 AND 99123 OR procKey = 77444);
テーブルステートメントを作成します。
'CREATE TABLE `example` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`modNum` char(4) DEFAULT NULL,
`procKey` char(8) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1'
サンプルデータ:
INSERT INTO `SAMPLE`.`EXAMPLE` (`modNum`, `procKey`) VALUES ('42', '99001');
INSERT INTO `SAMPLE`.`EXAMPLE` (`modNum`, `procKey`) VALUES ('42', '9900f');
条件を指定して列を更新するにはどうすればよいですか?
私にはそれはバグのように見えます。私が思いつくことができる最善の方法は、正規表現を使用してprocKeyの値が整数であるかどうかを確認することです。UPDATEステートメントを次のように変更しました。
UPDATE SAMPLE.EXAMPLE
SET modNum = CONCAT(modNum,"26")
WHERE modNum NOT LIKE '%26%'
AND procKey REGEXP '^[0-9]+$'
AND (procKey BETWEEN 90000 AND 99123
OR procKey = 77444);
もっと良い方法があれば教えてください。