将每个单词的首字母大写而不改变当前的大写字母

Posted

技术标签:

【中文标题】将每个单词的首字母大写而不改变当前的大写字母【英文标题】:Capitalise first letter of each word without changing currently Capitalised letters 【发布时间】:2017-07-11 08:07:43 【问题描述】:

我需要将每个单词的第一个字母大写,但在提交给 SQL Server 的文本框中保留可能已经存在的任何大写字母。我目前有一个我调用的 SQL 函数,但是它将第一个字母大写并小写每个单词的其余部分。 例如我需要的是,

约翰·史密斯 - 约翰·史密斯 ABC 有限公司 - ABC 有限公司

下面是我目前拥有的SQL函数。

 ALTER FUNCTION [dbo].[CAP_FIRST] ( @InputString varchar(4000) ) 
 RETURNS VARCHAR(4000) AS BEGIN

 DECLARE @Index          INT DECLARE @Char           CHAR(1) DECLARE
 @PrevChar       CHAR(1) DECLARE @OutputString   VARCHAR(255)

 SET @OutputString = LOWER(@InputString) SET @Index = 1

 WHILE @Index <= LEN(@InputString) BEGIN
     SET @Char     = SUBSTRING(@InputString, @Index, 1)
     SET @PrevChar = CASE WHEN @Index = 1 THEN ' '
                          ELSE SUBSTRING(@InputString, @Index - 1, 1)
                     END

     IF @PrevChar IN (' ', ';', ':', '!', '?', ',', '.', '_', '-', '/', '&', '''', '(')
     BEGIN
         IF @PrevChar != '''' OR UPPER(@Char) != 'S'
             SET @OutputString = STUFF(@OutputString, @Index, 1, UPPER(@Char))
     END

     SET @Index = @Index + 1 END

 RETURN @OutputString

 END

【问题讨论】:

What’s the best way to capitalise the first letter of each word in a string in SQL Server的可能重复 您为什么要在数据库而不是客户端中执行此操作?所有语言和报告工具都具有可以轻松执行大写的功能。 SQL 确实。它不是字符串操作语言 这在应用层更容易做到 例如 - 您的方法仅适用于 一些 英文名称。它不是内联函数,这意味着它也会导致性能问题。但在 C# 中,这只是对 CultureInfo.ToTitleCase 的调用 啊,好吧,我会那样做。谢谢大家的帮助。 @RafalZiolkowski 可能的重复并不是我想要的。不过还是谢谢。 【参考方案1】:

看来,以下行负责将整个输入字符串小写:

SET @OutputString = LOWER(@InputString)

然后,该函数选择性地将它认为是每个单词的开头的字母大写。用下面的赋值替换上面的行,输入字符串的原始大小写应该被保留:

SET @OutputString = @InputString

【讨论】:

成功了,谢谢,但我决定接受 cmets 并通过 c# 做我需要的事情。 @Emma 听起来像是一个计划,但也许这个答案对选择使用该功能的人有用。

以上是关于将每个单词的首字母大写而不改变当前的大写字母的主要内容,如果未能解决你的问题,请参考以下文章

使用 Vim 将所选内容中每个单词的首字母大写

将每个单词的第一个字母大写而不影响连续的字母

将数据框列中每个单词的首字母大写

使用流畅的语法将每个单词的首字母大写?

如何使用 JavaScript 将字符串中每个单词的首字母大写?

如何在 Perl 中将字符串中每个单词的首字母大写?