如何删除数据集中所有行的第一部分

tuwxkamq  于 2021-06-15  发布在  Mysql
关注(0)|答案(2)|浏览(305)

我有每天的数据,我变成每周使用excel透视表。我的“日期”栏过去看起来像:2018年1月1日,但现在(周刊)看起来像2018年1月1日-2018年1月7日。我想从我所有的行(200行)中删除第一部分,这样每行只显示一个日期,那就是稍后的一天:2018年1月7日。我知道有替换();但我希望每一行代表不同的数字。

ej83mcc0

ej83mcc01#

这是我的猜测。。。

CREATE TABLE my_table2 (
  my_date varchar(50)
);
INSERT INTO my_table2 (my_date) VALUES ('1/1/2018 - 1/7/2018');
INSERT INTO my_table2 (my_date) VALUES ('12/10/2018 - 12/16/2018');

SET @row_number = 0;

SELECT (@row_number:=@row_number + 1) as date_number
      ,t.my_date
      ,SUBSTRING(t.my_date, LOCATE(' - ',t.my_date,1) + 3, LENGTH(t.my_date) - LOCATE(' - ',t.my_date,1) + 3) as my_alt_date
  FROM my_table2 t;

这是输出。。。

+----+-------------+-------------------------+-------------+
|    | date_number |         my_date         | my_alt_date |
+----+-------------+-------------------------+-------------+
|  1 |           1 | 1/1/2018 - 1/7/2018     | 1/7/2018    |
|  2 |           2 | 12/10/2018 - 12/16/2018 | 12/16/2018  |
+----+-------------+-------------------------+-------------+

我用这个工具创建了ascii表。希望这能帮你开始。

toe95027

toe950272#

我想从我所有的行(200行)中删除第一部分,这样每行只显示一个日期,那就是后面的一天:2018年1月7日
您可以使用mysql正则表达式来实现这一点。
这是:

SELECT REGEXP_REPLACE('1/1/2018 - 1/7/2018', '.+ - ', '');

产量:

1/7/2018

说明:正则表达式 '.+ - ' 匹配从字符串开头到最后一个字符串的所有内容 - 子串; REGEXP_REPLACE 将用第三个参数(这里是一个空字符串)替换匹配部分。
你可以把它包起来 UPDATE 查询,如:

UPDATE my_table SET my_date = REGEXP_REPLACE(my_date, '.* - ', '');

相关问题