计算数字前的字符数

时间:2014-03-16 19:16:25

标签: mysql sql

在MySQL 5.6数据库中,我想修剪落在字符串中第一个数字之前的空格之后的所有内容,然后将结果插入到新表中。例如,SELECT id, strcolumn FROM sometable给出值:

8976    complicated 200 some other info
8977    something else 400 even more info
8978    intricate 300 lots of extra characters  

我希望新表将上面的内容缩小为:

8976    complicated
8977    something else
8978    intricate  

如何更改以下语句以便创建新的已编辑表格?

CREATE TABLE newtablename AS SELECT id, strcolumn FROM sometable

在Java中,我会一次遍历字符串一个字符,查找数值,然后从第一个数值的索引中减去1,并将字符串修剪为在指定索引处结束,结果为100 % 成功率。有没有办法在MySQL中做到这一点?

1 个答案:

答案 0 :(得分:0)

使用SUBSTRING_INDEX这是我写过的最丑的SQL:http://sqlfiddle.com/#!2/a79b4/1/0

CREATE TABLE sometable (id int primary key, strcolumn text);

INSERT INTO sometable VALUES (8976, 'complicated 200 some other info'), 
(8977, 'something else 400 even more info'), 
(8978, 'intricate 300 lots of extra characters ');

CREATE TABLE newtablename AS 
  SELECT id, 
         SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(
           strcolumn, 
           ' 1', 1), ' 2', 1), ' 3', 1), ' 4', 1), ' 5', 1), ' 6', 1), ' 7', 1), ' 8', 1), ' 9', 1), ' 0', 1) as strcolumn 
FROM sometable;

这是丑陋而低效的。 MySQL可以使用正则表达式进行搜索,但它不能返回基于它们的子字符串。我真的建议使用UDF或客户端脚本,这可能是您可以使用的RE:/ ^([^ 0-9] )\ s [0-9] < / em> /或者至少,创建一个封装它的函数。

问题可能不是100%明确,因为如果数字前面没有空格,或者它是第一个字符,您应该指定您想要的结果。