在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中做到这一点?
答案 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%明确,因为如果数字前面没有空格,或者它是第一个字符,您应该指定您想要的结果。