Mysql 计算数字前的字符数
在MySQL 5.6数据库中,我希望修剪字符串中第一个数字前空格后的所有内容,然后将结果插入到新表中。例如,Mysql 计算数字前的字符数,mysql,sql,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
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中有什么方法可以做到这一点吗?使用子字符串索引这是我写过的最难看的SQL: 这既丑陋又低效。MySQL可以使用正则表达式进行搜索,但不能返回基于正则表达式的子字符串。我确实建议使用UDF或客户端脚本,这可能是您可以使用的RE://([^0-9])\s[0-9]/或者至少创建一个函数来封装它
这个问题可能不是100%清楚,因为您应该指定,如果数字前面没有空格,或者是第一个字符,您希望得到什么结果。因此,您只需要取一个字母数字混合的字符串,并将其修剪到数字之前的最后一个字符(听起来像是正则表达式的工作,尽管我自己还没有在mysql中使用过)@shaunhusain是的,这就是我想要的。但是,当我使用正则表达式时,我注意到它们有98%以上的匹配率。我的数据集有200000行,因此99.5%的匹配率会产生1000个错误,这是不可接受的。我想要100%的成功率。很抱歉,没有足够的SQL专家告诉你是否有,也许是因为你的更多合作伙伴mfortable在Java中您可以这样编写脚本,200000行实际上并没有那么大,所以用Java处理它应该不会花费太多时间。将数据导出(
SELECT…)到OUTFILE…
),用适当的编程语言处理它,然后重新导入(LOAD data LOCAL infle
)。如果任务可能会定期重复,您还可以在程序中包含从/到db的数据处理。
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;