sql - initcap 仅适用于超过三个字符的单词
问题描述
我正在尝试创建一个将 initcap 应用于字段的选择语句,但我只想将超过三个字符的单词设为大写。
请注意,我无法创建外部函数,我的问题并没有被这个答案解决: Initcap skip words小于4 characters
因为他们解决了使用手动检查匹配项的程序。
所以我想用一些东西:
SELECT REGEXP_REPLACE(initcap(myField),"\w{1,10}\b") FROM dual
MyField 包含类似 GUNS N ROSES 的内容,我想转变成 Guns n Roses
解决方案
您需要为它执行单独的逻辑。
它需要将语句分解为单个单词并执行initcap
iflength
超过 3 个字符。之后使用aggregate function
.
WITH DATAA AS
(SELECT 'GUNS N ROSES' AS STR FROM DUAL)
SELECT LISTAGG(CASE WHEN LENGTH(STRR) > 3
THEN INITCAP(STRR)
ELSE STRR
END, ' ')
WITHIN GROUP (ORDER BY LVL) AS RESULT
FROM
(SELECT LEVEL AS LVL,
LOWER(REGEXP_SUBSTR(STR, '[^ ]+', 1, LEVEL)) AS STRR
FROM DATAA
CONNECT BY LEVEL <= REGEXP_COUNT(STR, ' ') + 1);
干杯!!
推荐阅读
- angular - 为什么 Angular HttpClient 类型检查不适用于 Map?
- javascript - 使用 Moment Js 生成时隙
- postgresql - 错误:父目录是全局可写但不是粘性 MAC
- python - 如何像 2D 一样转置 3D 矩阵?
- python - 按属性将列表划分为子列表
- google-cloud-platform - Google Vision API:图片上同时显示英语和阿拉伯语
- javascript - 将值传递给 EJS 文件
- android - 使用 ./gradlew assembleDebug 从命令行构建时找不到符号 DataBindingComponent
- python-3.x - 张量流模型的预测失败
- javascript - 有人可以建议一些更好的方法来编写这个 Javascript 代码