将每个单词的首字母大写而不改变当前的大写字母
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 听起来像是一个计划,但也许这个答案对选择使用该功能的人有用。以上是关于将每个单词的首字母大写而不改变当前的大写字母的主要内容,如果未能解决你的问题,请参考以下文章