【发布时间】:2023-01-26 23:40:48
【问题描述】:
我需要一个 SQL 语句(函数)来将每个单词的首字母大写,其他字符必须小写。我不知道该怎么做的部分是我需要保留 3 个字母单词的结构
话可以是这样的:
点食品, 点食物, 加拿大公司, 加拿大公司,
预期的 :
点食品, 点食品, 加拿大公司 , 加拿大公司,
有了这个功能,我得到了我需要的一切,除了最后一部分有 3 个词:
CREATE FUNCTION CAP(@String VARCHAR(8000))
RETURNS VARCHAR(8000)
AS
BEGIN
DECLARE @Position INT;
SELECT @String = STUFF(Lower(@String), 1, 1, UPPER(LEFT(@String, 1)))
COLLATE
Latin1_General_Bin,
@Position = PATINDEX('%[^A-Za-z''][a-z]%',
@String COLLATE Latin1_General_Bin);
WHILE @Position > 0
SELECT @String = STUFF(@String, @Position, 2, UPPER(
Substring(@String, @Position, 2)))
COLLATE
Latin1_General_Bin,
@Position = PATINDEX('%[^A-Za-z''][a-z]%',
@String COLLATE Latin1_General_Bin);
RETURN @String;
END;
【问题讨论】:
-
什么版本的 SQL Server?
-
正如您已经从当前函数中发现的那样,T-SQL 是一个真的必须使用糟糕的语言来执行此操作,因为它的字符串处理能力总之是垃圾。如果可能的话,请考虑将此步骤移动到您执行 ETL/数据摄取的任何方式,或者如果仅用于显示目的则移动到表示层。
-
当前使用:SQL Server Management Studio 15.0.18338.0
-
@Ace Management Studio 只是一个 IDE,而不是实际的 SQL Server。执行
@@version并显示该结果 -
您使用的 SSMS 版本并未告诉我们您使用的 SQL Server 版本。