3374. 首字母大写 II

表:user_content

±------------±--------+
| Column Name | Type |
±------------±--------+
| content_id | int |
| content_text| varchar |
±------------±--------+
content_id 是这张表的唯一主键。
每一行包含一个不同的 ID 以及对应的文本内容。
编写一个解决方案来根据下面的规则来转换 content_text 列中的文本:

将每个单词的 第一个字母 转换为 大写,其余字母 保持小写。
特殊处理包含特殊字符的单词:
对于用短横 - 连接的词语,两个部份 都应该 大写(例如,top-rated → Top-Rated)
所有其他 格式 和 空格 应保持 不变
返回结果表同时包含原始的 content_text 以及根据上述规则修改后的文本。

结果格式如下例所示。

示例:

输入:

user_content 表:

±-----------±--------------------------------+
| content_id | content_text |
±-----------±--------------------------------+
| 1 | hello world of SQL |
| 2 | the QUICK-brown fox |
| 3 | modern-day DATA science |
| 4 | web-based FRONT-end development |
±-----------±--------------------------------+
输出:

±-----------±--------------------------------±--------------------------------+
| content_id | original_text | converted_text |
±-----------±--------------------------------±--------------------------------+
| 1 | hello world of SQL | Hello World Of Sql |
| 2 | the QUICK-brown fox | The Quick-Brown Fox |
| 3 | modern-day DATA science | Modern-Day Data Science |
| 4 | web-based FRONT-end development | Web-Based Front-End Development |
±-----------±--------------------------------±--------------------------------+
解释:

对于 content_id = 1:
每个单词的首字母都是大写的:“Hello World Of Sql”
对于 content_id = 2:
包含的连字符词 “QUICK-brown” 变为 “Quick-Brown”
其它单词遵循普通的首字母大写规则
对于 content_id = 3:
连字符词 “modern-day” 变为 “Modern-Day”
“DATA” 转换为 “Data”
对于 content_id = 4:
包含两个连字符词:“web-based” → “Web-Based”
以及 “FRONT-end” → “Front-End”

题解

  1. 要考虑怎么把首字母切分出来,然后连接
    substring,concat,lower、upper,然后就慢慢转化呗
  2. 技术上不好处理,可以把问题前置,比如用代码处理,不用sql

方法一

-- 文本处理函数集合:将文本转换为首字母大写格式(支持含短横线的单词)
SELECT
content_id,
content_text AS original_text,
(-- 主查询:处理每个单词并重新连接成文本SELECT GROUP_CONCAT(CASE-- 处理含短横线的复合词(如 "quick-brown" → "Quick-Brown")WHEN INSTR(word, '-') > 0 THENCONCAT(UPPER(LEFT(SUBSTRING_INDEX(word, '-', 1), 1)), -- 第一部分首字母大写LOWER(SUBSTRING(SUBSTRING_INDEX(word, '-', 1), 2)), -- 其余小写'-', -- 保留短横线UPPER(LEFT(SUBSTRING_INDEX(word, '-', -1), 1)), -- 第二部分首字母大写LOWER(SUBSTRING(SUBSTRING_INDEX(word, '-', -1), 2)) -- 其余小写)-- 处理普通单词(如 "the" → "The")ELSECONCAT(UPPER(LEFT(word, 1)), LOWER(SUBSTRING(word, 2)))ENDSEPARATOR ' ') -- 用空格连接处理后的单词FROM (-- 子查询:将文本按空格拆分为单词(最多支持6个单词,可扩展)SELECT TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(LOWER(content_text), ' ', n), ' ', -1)) AS wordFROM (SELECT content_text FROM user_content WHERE content_id = t.content_id) AS cJOIN (SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALLSELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 -- 扩展此范围以支持更多单词) AS numsON CHAR_LENGTH(LOWER(content_text)) - CHAR_LENGTH(REPLACE(LOWER(content_text), ' ', '')) >= nums.n - 1) AS words
) AS converted_text
FROM user_content t;

方法二

WITH RECURSIVE cte_split AS (-- 初始分割文本,将每个单词逐一提取SELECTcontent_id,@x := content_text AS original_text,@dash := LOCATE('-', @x) AS first_dash,@space := LOCATE(' ', @x) AS fist_space,@sec := CASEWHEN @dash <> '0' AND @space <> '0' THENLEAST(CAST(@space AS UNSIGNED), CAST(@dash AS UNSIGNED))WHEN @dash = '0' AND @space = '0' THENLENGTH(@x)ELSEGREATEST(CAST(@space AS UNSIGNED), CAST(@dash AS UNSIGNED))END AS separate_loc,LEFT(@x, CAST(@sec AS UNSIGNED)) AS word,SUBSTRING(@x, CAST(@sec AS UNSIGNED) + 1) AS remaining_text,0 AS word_order -- 跟踪单词的顺序FROM user_contentUNION ALL-- 递归分割剩余文本中的单词SELECTcontent_id,original_text,@dash := LOCATE('-', remaining_text) AS first_dash,@space := LOCATE(' ', remaining_text) AS fist_space,@sec := CASEWHEN @dash <> '0' AND @space <> '0' THENLEAST(CAST(@space AS UNSIGNED), CAST(@dash AS UNSIGNED))WHEN @dash = '0' AND @space = '0' THENLENGTH(remaining_text)ELSEGREATEST(CAST(@space AS UNSIGNED), CAST(@dash AS UNSIGNED))END AS separate_loc,LEFT(remaining_text, CAST(@sec AS UNSIGNED)) AS word,SUBSTRING(remaining_text, CAST(@sec AS UNSIGNED) + 1) AS remaining_text,word_order + 1 -- 跟踪单词的顺序FROM cte_splitWHERE remaining_text <> ''
),
cte_transformed AS (SELECTcontent_id,original_text,word_order,CONCAT(UPPER(SUBSTRING(word, 1, 1)),LOWER(SUBSTRING(word, 2)))AS transformed_wordFROM cte_split
),
cte_reconstructed AS (-- 重建文本,将转换后的单词重新组合SELECTcontent_id,original_text,GROUP_CONCAT(transformed_word ORDER BY word_order SEPARATOR '') AS converted_textFROM cte_transformedGROUP BY content_id
)
SELECTcontent_id,original_text,converted_text
FROM cte_reconstructed;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/919524.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/919524.shtml
英文地址,请注明出处:http://en.pswp.cn/news/919524.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

告别笼统的 200 OK:一份给 API 设计者的 HTTP 状态码终极指南

文章目录写在前面问题描述核心结论与建议简要描述详细阐述1xx - 信息性响应 (Informational)2xx - 成功 (Successful)3xx - 重定向 (Redirection)4xx - 客户端错误 (Client Error)5xx - 服务器错误 (Server Error)HTTP 状态码速查表参考以及更多更详细的状态码查询写在前面 你…

从防抖节流到链表树:编程世界中的抽象优化艺术

从防抖节流到链表树&#xff1a;编程世界中的抽象优化艺术 在编程的知识体系中&#xff0c;有些概念看似毫不相关&#xff0c;却在底层逻辑上有着惊人的相似之处。防抖与节流、链表与树&#xff0c;这两组分属不同领域的概念&#xff0c;正是这种思维共性的典型代表。它们不仅展…

第三阶段数据-3:数据库脚本生成,备份与还原,分离与附加

1_生成数据库脚本&#xff08;1&#xff09;在数据库上右键选择任务&#xff08;2&#xff09;选择生成脚本&#xff08;3&#xff09;选择下一步&#xff0c;如果下次不想显示此页面&#xff0c;可勾选不再显示此页&#xff08;4&#xff09;如果导出全部数据&#xff0c;选择…

React框架超详细入门到实战项目演练【前端】【React】

React框架 1.前端展示解释 当客户端访问服务器时&#xff0c;会从服务器中下载很多静态文件到本地&#xff0c;比如css、js等前端渲染文件 下载完成之后浏览器会将这些文件组合形成前端页面渲染出来。 2.React概述 React是一个专注于构建用户界面的JavaScript库&#xff0c;…

本地部署的终极多面手:Qwen2.5-Omni-3B,视频剪、音频混、图像生、文本写全搞定

Qwen2.5-Omni-3B是什么&#xff1f; Qwen2.5-Omni-3B 是由阿里巴巴 Qwen 团队推出的一款轻量级多模态大模型&#xff0c;作为 Qwen2.5-Omni-7B 的高效优化版本&#xff0c;专为消费级硬件环境量身打造。该模型具备处理文本、音频、图像和视频等多种模态输入的能力&#xff0c;…

连续空间强化学习:策略输出的两种形态 —— 概率分布与确定性动作

在强化学习的世界里&#xff0c;智能体与环境的交互核心是 “动作选择”。当面对离散动作空间&#xff08;如围棋的落子点、游戏的按键操作&#xff09;时&#xff0c;智能体可以直接枚举或概率选择有限的动作&#xff1b;但在连续动作空间中&#xff08;如机器人关节角度、无人…

IT运维背锅权限泄露?集中式管控如何化解风险?

在企业数字化转型的浪潮中&#xff0c;IT运维团队常常被推到风口浪尖。员工离职后权限未及时回收、账号共享导致数据泄露、跨系统权限配置不一致……这些问题一旦暴露&#xff0c;IT运维往往成为“背锅侠”。权限泄露不仅威胁企业数据安全&#xff0c;还可能导致合规性风险&…

2025 世界机器人大会启示录:机构学 × AI × 视频链路的融合之路

引言 2025 年 8 月 8 日&#xff0c;北京再一次成为全球瞩目的科技焦点——世界机器人大会盛大开幕。来自全球的 200 余家顶尖企业齐聚一堂&#xff0c;带来超过 1500 件展品&#xff0c;其中首发新品突破 100 款&#xff0c;涵盖了从工业制造、医疗康复到服务陪伴、特种作业的…

从零开始部署经典开源项目管理系统最新版redmine6-Linux Debian12

安装Debian 12 前面为了在windows上好开发&#xff0c;想要在windows上配置开发环境&#xff0c;以源码方式在本地部署运行&#xff0c;但经过好几天各种版本切换及配置组件库等各种操作后&#xff0c;证明windows上搭建redmine6支持的运行环境没有那么简单&#xff0c;后续有…

超长视频生成新突破!LongVie框架问世,创作不再受时长限制

超长视频生成新突破&#xff01;LongVie框架问世&#xff0c;创作不再受时长限制 文章来源&#xff1a;Poixe AI 在AI技术飞速发展的当下&#xff0c;视频生成领域取得了令人瞩目的进步&#xff0c;尤其是在短视频创作方面。然而&#xff0c;当视频时长超过一分钟时&#xff…

MongoDB 查询方法与高级查询表(Python版)

目录 一、MongoDB3步快速安装 1.1​下载安装包 1.2运行安装程序​ 1.3​验证安装​打开CMD执行&#xff1a; 1.4 基本查询操作 二、高级查询操作符表 2.1 比较操作符 2.2 逻辑操作符 2.3 元素操作符 2.4 数组操作符 三、高级查询案例 3.1 复杂条件组合 3.2 数组查…

选型指南:如何为企业挑选合适的边缘计算网关

选型指南&#xff1a;如何为企业挑选合适的边缘计算网关在企业迈向智能化转型的道路上&#xff0c;选择一款合适的物联网边缘计算网关至关重要。面对众多型号和功能各异的网关产品&#xff0c;企业该如何做出正确抉择呢&#xff1f;​首先要考虑的是网关的兼容性。蓝蜂物联网边…

HT8693 音频功率放大器:赋能优质音频体验的核心之选

在音频设备快速迭代的当下&#xff0c;用户对音质表现、设备稳定性和场景适应性的需求日益提升&#xff0c;一款性能卓越的音频功率放大器成为连接音源与听觉享受的关键桥梁。HT8693 凭借双模式切换、强劲输出、智能保护等核心优势&#xff0c;为各类音频设备提供了可靠的性能支…

python+flask后端开发~项目实战 | 博客问答项目--模块化文件架构的基础搭建

项目功能概述&#xff1a; 首页(公开博客显示)博客发布与查询用户登录与注册底层MySQL数据库的动态响应与支持 简介&#xff1a;Flask作为Python的一个轻量级Web框架&#xff0c;以其灵活性和可扩展性&#xff0c;赢得了众多开发者的青睐。从本文开始&#xff0c;你将从0开始…

精品方案 | GCKontrol与OMNeT++联合仿真在机载网络性能分析中的应用

概述本文基于GCKontrol搭建了飞行仿真模型&#xff0c;并基于OMNeT搭建了机内网络系统&#xff0c;实现了不同专业、不同平台的模型集成与调试。通过这种联合仿真架构&#xff0c;能够模拟飞机在不同飞行状态下的网络性能&#xff0c;极大提高了性能评估的精度和可靠性。这不仅…

阶跃星辰 StepFun 入驻 GitCode 平台,带来工业级 AI 体验

在 2025 年的 AI 产业应用实践中&#xff0c;开发者面临三重核心挑战&#xff1a;​⚠️上下文窗口局限​&#xff1a;主流 AI 模型普遍受限于 4K-32K 的上下文长度&#xff0c;导致技术方案文档需被强制拆分处理&#xff0c;破坏架构设计的连贯性。 ​⚠️跨行业文档识别缺陷​…

亚马逊新品爆单策略:从传统困境到智能突破

新品上架&#xff0c;是每个亚马逊卖家最期待又最煎熬的阶段。我至今记得一款新品上线后的第一周&#xff1a;每天看着广告费像流水一样烧掉&#xff0c;单量却迟迟不见起色。后台的ACOS一路飙升&#xff0c;几天时间&#xff0c;我的预算已经消耗了一大半。那种“钱花了&#…

第7章 React性能优化核心

性能优化是React开发中的重要主题,直接影响用户体验和应用成功。本章将深入探讨React性能优化的核心技术和最佳实践,从组件记忆化到Bundle优化,帮你掌握构建高性能React应用的关键技能。 通过本章学习,你将掌握如何识别性能瓶颈、选择合适的优化策略,以及在实际项目中应用…

docker CI操作演示分享(第四期)

引言java项目&#xff1a;1、将项目通过maven进行编译打包2、将文件上传到指定的服务器中3、将war包放到tomcat的目录中4、通过Dockerfile将tomcat和war包转成一个镜像&#xff0c;由docker-compose去运行容器项目更新后&#xff1a;将上述流程再次的从头到尾的执行一次go项目&…

Kubernetes 的 YAML 配置文件-kind

Kubernetes的YAML配置文件–kind 在 Kubernetes 的 YAML 配置文件中,kind: 字段用于指定你要创建的资源对象类型。Kubernetes 支持多种资源类型,它们可以分为以下几大类: 一、核心资源类型(常用) 1. Pod 描述:最小的部署单元,包含一个或多个容器。 特点:临时性(Pod …