overmind 2023-07-10 16:31 采纳率: 92.9%
浏览 54
已结题

建立视图,对字符串进行筛选

使用的是postgres数据库,基础表格如下所示

sudo -u postgres psql sanguo -c "CREATE TABLE items(id serial, name VARCHAR(20),city VARCHAR(10),effects VARCHAR(30),value int);"
sudo -u postgres psql sanguo -c "INSERT INTO items(name,city,effects,value) VALUES('短戟','北海','武力+2','10'),('司马法','北海','统率+7 军师','50'),('墨子','北海','统率+4 攻城','30'),('管子','北海','政治+8 耕作','45'),('尉缭子','长安','统率+5 军师','40'),('漆叶青粘散','长安','寿命延长','45'),('商君书','长安','政治+7 耕作','40'),('孙子兵法','长沙','统率+10 鬼谋','70'),('麻沸散','长沙','寿命延长','50'),('老君入仙符','长沙','智力+8 寿命延长','25'),('手戟','长沙','武力+2','10'),('论语','陈留','智力+7 人脉','50'),('金马槊','成都','武力+2','10'),('梅花袖箭','成都','武力+2 一骑','20'),('屠命散','桂阳','寿命延长','25'),('吴钩','桂阳','武力+1','5'),('吴越春秋','会稽','政治+2 水练','35'),('栢弓','蓟','武力+1 远射','25'),('百辟刀','蓟','武力+3','15'),('五石散','蓟','寿命延长','40'),('孙膑兵法','建邺','统率+5 冷静','40'),('养由基之弓','江陵','武力+4 远射','40'),('山海经','江州','智力+1 神速','30'),('斩蛇之剑','洛阳','武力+10 豪杰','70'),('四月民令','洛阳','政治+2 耕作','20'),('韩非子','洛阳','政治+10 兵心','50'),('周书阴符','洛阳','政治+2 冷静','35'),('短戟','濮阳','武力+2','10'),('亭历犬血散','濮阳','寿命延长','45'),('吴子','汝南','统率+6 军师','45'),('檀弓','汝南','武力+1','10'),('庄子','汝南','智力+8 辫舌','50'),('六韬','天水','统率+8 冷静','60'),('李广之弓','天水','武力+4 远射','40'),('伤寒杂病论','宛城','寿命延长','35'),('双铁戟','宛城','武力+4','15'),('大宛马','西凉','确实撤退','40'),('凉州马','西凉','确实撤退','40'),('礼记','西凉','智力+5 名士','35'),('遁甲天书','西凉','智力+3 鬼谋','45'),('史记','小沛','政治+5','20'),('青囊书','小沛','寿命延长','45'),('牛灯','许昌','监视','15'),('九鼎神丹经','许昌','智力+2','15'),('魏公子兵法','邺城','统率+3 练兵','25'),('枣木槊','永安','武力+1','5'),('双股剑','蓟','武力+3','5'),('青龙偃月刀','涿','武力+20','60'),('丈八蛇矛','涿','武力+30','60');"
  • 希望建立一个视图
  • 视图中有几列,1.item_id 2.item_name 3.武力增强值 4. 智力增强值 5.统御增强值 6.政治增强值
  • 写回答

5条回答 默认 最新

  • 开发技术控 2023-07-10 16:39
    关注

    sql

    CREATE VIEW item_view AS 
    SELECT 
        id AS item_id,
        name AS item_name,
        (CASE WHEN effects LIKE '%武力%' THEN CAST(SUBSTRING(effects FROM '[0-9]+') AS INT) ELSE 0 END) AS 武力增强值,
        (CASE WHEN effects LIKE '%智力%' THEN CAST(SUBSTRING(effects FROM '[0-9]+') AS INT) ELSE 0 END) AS 智力增强值,
        (CASE WHEN effects LIKE '%统率%' THEN CAST(SUBSTRING(effects FROM '[0-9]+') AS INT) ELSE 0 END) AS 统御增强值,
        (CASE WHEN effects LIKE '%政治%' THEN CAST(SUBSTRING(effects FROM '[0-9]+') AS INT) ELSE 0 END) AS 政治增强值
    FROM items;
    

    这个视图通过对items表中的effects文本进行匹配,提取出数字作为各属性的增强值,如果没有匹配到则为0。
    查看视图:
    sql

    SELECT * FROM item_view;
    

    这样就得到了所需的包括item_id, item_name和四种属性增强值的视图。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 7月18日
  • 已采纳回答 7月10日
  • 修改了问题 7月10日
  • 赞助了问题酬金15元 7月10日
  • 展开全部

悬赏问题

  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因