Mysql 提取特定列中每个单词的首字母
我想在表中创建一个缩写词列。我想从“名称”列中获取每个单词的第一个字母,将其大写,然后将所有单词连接到“首字母缩略词”列中。
有什么简单的方法来获取第一个字母吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我想在表中创建一个缩写词列。我想从“名称”列中获取每个单词的第一个字母,将其大写,然后将所有单词连接到“首字母缩略词”列中。
有什么简单的方法来获取第一个字母吗?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(8)
这是一个“改进”的功能,允许通过正则表达式仅过滤想要的字符。
initials
执行实际工作,您必须指定正则表达式acronym
只执行保留字母数字字符的工作(使用
upper
,如有必要,请在输出上使用lower
或ucase
函数)。
示例1:
输出:
示例 2:
输出:
Here is an "improved" function, allowing to filter only wanted characters thanks to a regular expression.
initials
does the actual job, you have to specify the regular expressionacronym
does the job keeping Alpha-numeric characters only(Use
upper
,lower
orucase
functions on the output if necessary).
Example1:
Outputs:
Example2:
Outputs:
这种字符串操作不是 SQL 的设计目的,除非您想为其编写存储过程或 UDF。
SQL 并不真正适合这种类型的字符串操作。您可能会以某种方式做到这一点,但是当其他地方有更好的工具时,您为什么还要这么做呢?我在 Google 上进行了长时间的搜索,以找到这样的查询语句,但我找不到。只需使用以下函数即可实现您想要的效果。
String manipulation of this kind is not what SQL is designed for, unless you want to write a stored procedure or UDF for it.
SQL isn't really suited for string manipulation of this sort. You may do it somehow but why would you when better tools are available elsewhere? I went on a long search on Google to find such a query statement but I couldn't. Just use the following function to achieve what you want.
我知道这有点晚了,但我想为那些创建视图或 .sql 文件以供定期使用的人提供一种非函数方式来执行此操作:
这是两个步骤,并且您必须包括条件 substring() 行对应您预期出现在字符串中的每个单词,但这只是 @spaces 比较值的复制、粘贴和增量。然而,我这样做的要求可能比某些人宽松一些。无论如何,它可以工作并且不会导致明显的速度问题。
I know this is a little late to the game, but I wanted to offer up a non-function way of doing this for those of you creating a view or a .sql file for periodic use:
It's two steps, and you have to include a conditional substring() line for every word you anticipate being in the string, but that is just a copy, paste, and increment of the comparison value for @spaces. My requirements for doing this may be a little looser than some, however. Regardless, it works and causes no noticeable speed issues.
这应该将所有第一个字母放入结果集中:
我认为,将它们全部连接成一个首字母缩略词将需要某种过程。我认为这不能通过声明来完成。
This should get all the first letters into a result set:
Concatenating them all into a single acronym would, I think, require a procedure of some kind. I don't think it can be done in a statement.
您的意思是 LEFT 和 上部?
Do you mean LEFT and UPPER?
查询:
in a query:
这适用于 3 个字母的术语:
这是 4 个单词的术语:
好的,好的,这里是 5 个单词;)
This works for 3-letter terms:
Here is the one for 4 word terms:
Ok ok here is 5 words ;)
这是一个正则表达式解决方案(最初提出这个问题时可能不可能):
\\b
matches a word border(\\w)
captures the first character[^\\s]+
消耗单词\\1
中其余的非空白字符,然后外部
REGEXP_REPLACE 从结果中删除空格。
Here is a REGEX solution (likely not possible when this question was originally asked):
\\b
matches a word boundary(\\w)
captures the first character[^\\s]+
consumes the rest of the non-whitespace characters in the word\\1
keeps only the captured character from each wordThen the outer
REGEXP_REPLACE
removes the whitespace from the result.