MySQL将错乱的水果信息,截取展示为 品名 英文名 价格 三列展示

将错乱的水果信息,截取展示为 品名 英文名 价格 三列展示

idname
1苹果Apple7
2Plum6李子
3Pineapple8菠萝
4Mango5芒果
5龙吐珠5Buddha’sHand
6Olive9橄榄
7Raspberry4树莓
8Apricot5杏子
9Grapefruit9柚子
10火龙果Dragonfruit9
11倒挂金钟Hanging6LobsterClaw
12巨峰葡萄Concord5Grape
13Lingonberry5红莓
14甜橙7SweetOrange
15金桔8Kumquat
16金橘5Tangerine
17玫瑰果6RoseHip
18硬木仁Brazil7Nut
19Pomegranate8石榴
20黑莓Blackberry5
21Banana5香蕉
22橙子Orange7
23Grape7葡萄
24草莓4Strawberry
25Watermelon6西瓜
26梨9Pear
27Peach9桃子
28樱桃Cherry6
29Lemon9柠檬
30木瓜Papaya9
31杨梅Bayberry7
32Pomelo4柚子
33榴莲Durian8
34荔枝Lychee8
35Blueberry5蓝莓
36樱桃番茄Cherry9Tomato
37Rambutan6红毛丹
38Avocado5牛油果
39椰子5Coconut
40柚柑9Kumquat
41Loquat6李子
42桑葚4Mulberry
43Starfruit4杨桃
44Cranberry5蓝莓
45Jackfruit6珍珠果
46无花果Fig9
47Bilberry7蓝莓
48黄杨果Yellow7PassionFruit
49MonkFruit6石斛
50枇杷7Loquat
98AvocadoPear4鳄梨梨
99桑葚Elderberry9

在这里插入图片描述

解决办法:

--创建表
CREATE TABLE fruit (
    id INT AUTO_INCREMENT PRIMARY KEY,
    NAME VARCHAR(255) NOT NULL
);
--插入数据
INSERT INTO fruit (name) VALUES
('苹果Apple7'),
('Plum6李子'),
('Pineapple8菠萝'),
('Mango5芒果'),
('龙吐珠5Buddha''sHand'),
('Olive9橄榄'),
('Raspberry4树莓'),
('Apricot5杏子'),
('Grapefruit9柚子'),
('火龙果Dragonfruit9'),
('倒挂金钟Hanging6LobsterClaw'),
('巨峰葡萄Concord5Grape'),
('Lingonberry5红莓'),
('甜橙7SweetOrange'),
('金桔8Kumquat'),
('金橘5Tangerine'),
('玫瑰果6RoseHip'),
('硬木仁Brazil7Nut'),
('Pomegranate8石榴'),
('黑莓Blackberry5'),
('Banana5香蕉'),
('橙子Orange7'),
('Grape7葡萄'),
('草莓4Strawberry'),
('Watermelon6西瓜'),
('梨9Pear'),
('Peach9桃子'),
('樱桃Cherry6'),
('Lemon9柠檬'),
('木瓜Papaya9'),
('杨梅Bayberry7'),
('Pomelo4柚子'),
('榴莲Durian8'),
('荔枝Lychee8'),
('Blueberry5蓝莓'),
('樱桃番茄Cherry9Tomato'),
('Rambutan6红毛丹'),
('Avocado5牛油果'),
('椰子5Coconut'),
('柚柑9Kumquat'),
('Loquat6李子'),
('桑葚4Mulberry'),
('Starfruit4杨桃'),
('Cranberry5蓝莓'),
('Jackfruit6珍珠果'),
('无花果Fig9'),
('Bilberry7蓝莓'),
('黄杨果Yellow7PassionFruit'),
('MonkFruit6石斛'),
('枇杷7Loquat'),
('蜜瓜7Cantaloupe'),
('鳄梨(牛油果)4AlligatorPear'),
('龙眼8Longan'),
('Blackcurrant6黑加仑'),
('火龙果Pitaya4'),
('NashiPear5橙梨'),
('Pomelo8柚'),
('覆盆子7Boysenberry'),
('Juniper9Berry杜松子酒浆果'),
('Tangerine4沙糖桔'),
('硕果Jujube7'),
('Juniper杜松子5'),
('黑莓Boysenberry5'),
('雪梨SnowPear8'),
('亚洲梨AsianPear9'),
('鸽梨9PigeonPlum'),
('蓝莓9Huckleberry'),
('黑桃9BlackPlum'),
('李子4Greengage'),
('Wild5Grape野葡萄'),
('Raspberry6覆盆子'),
('HamiMelon8哈密瓜'),
('黄金果Golden6Kiwi'),
('硕果仁Sapote5'),
('青梅Green7Plum'),
('红丝绒香蕉9RedVelvetBanana'),
('樱李子4RainierCherry'),
('鸭梨9DuckPear'),
('龙舌兰9Agave'),
('木瓜9Pawpaw'),
('红提子4RedCurrant'),
('桃仁Peach6PalmFruit'),
('杨桃Carambola5'),
('Yumberry7杨梅'),
('JujubeDate9青枣'),
('MorelloCherry6樱桃李'),
('ChineseLanternFruit灯笼果9'),
('紫葡萄ConcordGrape9'),
('Gage李子4'),
('黑枸杞BlackGojiBerry5'),
('WingedBean翅果8'),
('硕果科Sapodilla8'),
('樱桃杏NankingCherry8'),
('灯笼果GroundCherry4'),
('ChineseBayberry6荔子'),
('BlueHoneysuckle5蓝莓挺柿子'),
('GojiBerry5枸杞'),
('AvocadoPear4鳄梨梨'),
('桑葚Elderberry9');

解决SQL:

SELECT
  REGEXP_SUBSTR(name, '[\\p{Han}]+') AS 品名,
  REGEXP_SUBSTR(name, '[A-Za-z]+') AS 英文名,
  REGEXP_SUBSTR(name, '[0-9]+(?=$|[^0-9])') AS 价格
FROM
  fruit;



第二种写法:

SELECT
    TRIM(REGEXP_REPLACE(name, '[^\\x{4e00}-\\x{9fa5}]', '')) AS 品名,
    TRIM(REGEXP_REPLACE(name, '[^a-zA-Z\' ]', '')) AS 英文名,
    TRIM(REGEXP_REPLACE(name, '[^0-9]', '')) AS 价格
FROM
    fruit;
	
注释:

这段查询使用了 REGEXP_REPLACE 函数来分别提取中文字符、英文字符和数字字符:

TRIM(REGEXP_REPLACE(name, '[^\\x{4e00}-\\x{9fa5}]', '')) 提取中文字符,并使用 TRIM 去除首尾的空格。
[^\\x{4e00}-\\x{9fa5}] 表示非中文字符范围的字符,将它们替换为空字符串。
TRIM(REGEXP_REPLACE(name, '[^a-zA-Z\' ]', '')) 提取英文字符,并使用 TRIM 去除首尾的空格。
[^a-zA-Z\' ] 表示非英文字符的字符,将它们替换为空字符串。包含空格和撇号以保留英文单词中的空格和撇号。
TRIM(REGEXP_REPLACE(name, '[^0-9]', '')) 提取数字字符,并使用 TRIM 去除首尾的空格。
[^0-9] 表示非数字字符的字符,将它们替换为空字符串。

最终效果:

品名英文名价格
苹果Apple7
李子Plum6
菠萝Pineapple8
芒果Mango5
龙吐珠Buddha’s Hand5
橄榄Olive9
树莓Raspberry4
杏子Apricot5
柚子Grapefruit9
火龙果Dragonfruit9
倒挂金钟Hanging Lobster Claw6
巨峰葡萄Concord Grape5
红莓Lingonberry5
甜橙Sweet Orange7
金桔Kumquat8
金橘Tangerine5
玫瑰果Rose Hip6
硬木仁Brazil Nut7
石榴Pomegranate8
黑莓Blackberry5
香蕉Banana5
橙子Orange7
葡萄Grape7
草莓Strawberry4
西瓜Watermelon6
Pear9
桃子Peach9
樱桃Cherry6
柠檬Lemon9
木瓜Papaya9
杨梅Bayberry7
柚子Pomelo4
榴莲Durian8
荔枝Lychee8
蓝莓Blueberry5
樱桃番茄Cherry Tomato9
红毛丹Rambutan6
牛油果Avocado5
椰子Coconut5
柚柑Kumquat9
李子Loquat6
桑葚Mulberry4
杨桃Starfruit4
蓝莓Cranberry5
珍珠果Jackfruit6
无花果Fig9
蓝莓Bilberry7
黄杨果Yellow Passion Fruit7
石斛Monk Fruit6
枇杷Loquat7
蜜瓜Cantaloupe7
鳄梨(牛油果)Alligator Pear4
龙眼Longan8
黑加仑Blackcurrant6
火龙果Pitaya4
橙梨Nashi Pear5
Pomelo8
覆盆子Boysenberry7
杜松子酒浆果Juniper Berry9
沙糖桔Tangerine4
硕果Jujube7
杜松子Juniper5
黑莓Boysenberry5
雪梨Snow Pear8
亚洲梨Asian Pear9
鸽梨Pigeon Plum9
蓝莓Huckleberry9
黑桃Black Plum9
李子Greengage4
野葡萄Wild Grape5
覆盆子Raspberry6
哈密瓜Hami Melon8
黄金果Golden Kiwi6
硕果仁Sapote5
青梅Green Plum7
红丝绒香蕉Red Velvet Banana9
樱李子Rainier Cherry4
鸭梨Duck Pear9
龙舌兰Agave9
木瓜Pawpaw9
红提子Red Currant4
桃仁Peach Palm Fruit6
杨桃Carambola5
杨梅Yumberry7
青枣Jujube Date9
樱桃李Morello Cherry6
灯笼果Chinese Lantern Fruit9
紫葡萄Concord Grape9
李子Gage4
黑枸杞Black Goji Berry5
翅果Winged Bean8
硕果科Sapodilla8
樱桃杏Nanking Cherry8
灯笼果Ground Cherry4
荔子Chinese Bayberry6
蓝莓挺柿子Blue Honeysuckle5
枸杞Goji Berry5
鳄梨梨Avocado Pear4
桑葚Elderberry9

注释:

SELECT
  -- 使用 REGEXP_SUBSTR 函数提取 name 字段中所有连续的汉字作为品名
  REGEXP_SUBSTR(name, '[\\p{Han}]+') AS 品名,
  
  -- 使用 REGEXP_SUBSTR 函数提取 name 字段中所有连续的英文字母作为英文名
  -- 这里假设英文名没有数字,并且英文名是连续的
  REGEXP_SUBSTR(name, '[A-Za-z]+') AS 英文名,
  
  -- 使用 REGEXP_SUBSTR 函数提取 name 字段中所有的数字作为价格
  -- 正则表达式 '[0-9]+' 匹配一个或多个数字
  -- 正向前瞻断言 (?=$|[^0-9]) 确保数字后面是字符串的结尾或者不是一个数字
  -- 这样确保价格数字后面没有紧跟其他数字
  REGEXP_SUBSTR(name, '[0-9]+(?=$|[^0-9])') AS 价格
FROM
  -- 指定从 fruit 表中选择记录
  fruit;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值