MySQL:从字符串列中获取分配数字

标签 mysql data-structures

该表包含一个包含字符串的列。我想从字符串中提取数字。

代码:http://sqlfiddle.com/#!9/2af45

例如:
1 天 = 1
2 天随时 = 2
7 天 = 7

同日 = 1
对于不包含任何数字的字符串,我想为其分配一个数字。

我的想法:
enter image description here

最好的解决方案是什么,使得查询不会对 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/

相关文章:

c - C : remove node function 中的二叉搜索树

java - 是否有一种数据结构能够获取 N 个最大元素的集合,并用 Java 实现?

c# - 使用多个键创建字典并使用其中一个键获取值

java - 如何在两个列表之间找到匹配的对象?

php - 每个月自动递增从 1 在 mysql 中用 php 开始

mysql计算新列的出现次数

c# - 检查现有项目不起作用

php - 如何在二维数组中不重复值的情况下在另一个循环内创建一个循环

c++ - 如何解释 'regex e' 行?

php - 使用 strpos 识别 UPDATE 或 INSERT 查询 : not working as expected