我有一个名为“ products”的表,其中一列为“ SerialNumber”。问题在于此列为文本latin1_swedish_ci,其值类似于“ BC00001,BC0002等”。我需要选择序列号大于某个给定序列号的所有产品。 我试过这样选择:
SELECT * FROM 'products' WHERE 'SerialNumber' >= 'BC00563'
但是由于此列是文本,因此无法正常工作。 我无法修改表结构,因为此表已经有20.000条记录。 任何帮助表示赞赏!
答案 0 :(得分:1)
假设值始终是两个字符后跟数字,则可以去除字符并将其余值转换为number
以进行比较,例如:
SELECT *
FROM `products`
WHERE `SerialNumber` >=
CASE WHEN 'BC00563' regexp '[A-Z]' THEN
CONVERT(SUBSTRING("BC00563", 3, LENGTH("BC00563")), UNSIGNED)
ELSE 'BC00563' END;
您可以使用列名代替常量值。