SQL Server 轻松修改数据的大小写
下面就是用来创建名为udf_CorrectCasing函数的脚本。这个函数将接受任何长度的字符串,并返回相同的字符串,但字符串中每个单词的首字母都会转换为大写字母,而单词剩下的部分都转换为小写字母。例如,如果将字符串“hello world”传递给函数,那么就会返回“Hello World”:
CREATE FUNCTION udf_CorrectCasing
(
@String VARCHAR(MAX)
)
RETURNS VARCHAR(MAX)
BEGIN
DECLARE @Length INT, @Increment INT, @NewString VARCHAR(MAX)
DECLARE @CurrentCharacter CHAR(1), @PreviousCharacter CHAR(1)
SET @Length = LEN(LTRIM(RTRIM(@string)))
SET @Increment = @Length - 1
SET @NewString = ''
SET @PreviousCharacter = ''
SET @String = LOWER(@String)
WHILE @Increment >= 0
BEGIN
SET @CurrentCharacter = SUBSTRING(@String, (@Length-@Increment), 1)
SET @NewString = @NewString + CASE WHEN @PreviousCharacter = '' THEN
UPPER(@CurrentCharacter) ELSE @CurrentCharacter END
SET @PreviousCharacter = @CurrentCharacter
SET @Increment = @Increment - 1
END
RETURN(@NewString)
END
函数详解
我们需要将传递给该函数的字符串中的所有字符都循环一遍,看看是不是按我们的需要改变大小写状态。这可能会让函数运行起来相对慢些,但不会慢到你能注意到的地步。还有其他的方法可以完成这个函数的任务,例如在公共语言运行库(CLR)中使用正则表达式(regular expression),不过对于我们要达到的目的,用这个函数就可以了。
首先,我们确定字符串的长度。接着,我们设置了一些随后将在函数中用到的协助器变量。然后,我们将所有的字符都设置为小写。在循环里,我们创建了一个新字符串,添加最新字符并通过检查前一个字符是否为空格符来决定该字符的大小写状态。如果前一个字符是空格符,那么下一个字符就应当转换为大写状态。一旦把字符串里所有的字符都循环了一遍,就返回该新字符串。
需要用到这函数直接调用就行了:
SELECT dbo.udf_CorrectCasing(Address) FROM Customers;