该表包含一个包含字符串的列。我想从字符串中提取数字。
代码:http://sqlfiddle.com/#!9/2af45
例如:
1 天 = 1
2 天随时 = 2
7 天 = 7
同日 = 1
对于不包含任何数字的字符串,我想为其分配一个数字。
最好的解决方案是什么,使得查询不会对 MySQL 的加载速度造成太大影响?
额外挑战:如果数字随机出现在字符串中,是否有任何方法/算法可以提取该数字?
例如。每2天一次,7天内促销
最佳答案
如果字符串以数字开头,您可以简单地 CAST
它是一个UNSIGNED
。数字后面的任何文本都会被忽略
CAST("2 Day anytime" AS UNSIGNED);
CAST("20 fishes" AS UNSIGNED);
任何不以数字开头的字符串都将变为0
。您可以通过 NULLIF
的组合将其转换为其他值和 IFNULL
.
IFNULL(NULLIF(CAST("SameDay" AS UNSIGNED), 0), 1);
<小时/>
您可以使用 ALTER TABLE
创建新列,然后执行 UPDATE
查询。
UPDATE foo (days_int)
SELECT IFNULL(NULLIF(CAST(days_string AS UNSIGNED), 0), 1)
FROM foo;
请注意,更新和选择来自同一个表。
关于MySQL:从字符串列中获取分配数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37652915/