WEB开发网
开发学院数据库MSSQL Server SQL Server 轻松修改数据的大小写 阅读

SQL Server 轻松修改数据的大小写

 2008-03-27 09:54:42 来源:WEB开发网   
核心提示:本文我们将创建一个在更新数据或以一种让人看起来顺眼的方式为终端用户展示数据方面非常有用的函数,本文的例子适用于SQL Server 2000及以上的版本,SQL Server 轻松修改数据的大小写, 数据展示(data presentation)数据被源系统接收并加工时,并不总是以一种看起来很舒服的形式出现在我们面前的

本文我们将创建一个在更新数据或以一种让人看起来顺眼的方式为终端用户展示数据方面非常有用的函数。本文的例子适用于SQL Server 2000及以上的版本。

数据展示(data presentation)

数据被源系统接收并加工时,并不总是以一种看起来很舒服的形式出现在我们面前的。例如可能所有的数据都是大写的或所有数据都是小写的,数据可能在必要的地方没有添加标点符号等类似的情况都会出现。

很多时候,数据展示并不是什么大不了的事情,也就是从数据库将数据抽取出来并按照它们的原样呈现出来。不过,有些时候,我们就有必要让数据看起来更像样一点,例如将数据放到网页上的时候。

展示数据的方法有好几种,有可以通过网页代码本身展示,还有可以在数据库里进行格式化。下面的例子将介绍一个简单的函数,你可以用它来返回数据到终端用户或在数据库中更新数据,这样数据就可以一直以同一种方式来储存。

下面就是用来创建名为udf_CorrectCasing函数的脚本。这个函数将接受任何长度的字符串,并返回相同的字符串,但字符串中每个单词的首字母都会转换为大写字母,而单词剩下的部分都转换为小写字母。例如,如果将字符串“hello guys”传递给函数,那么就会返回“Hello Guys”:

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),不过对于我们要达到的目的,用这个函数就可以了。

首先,我们确定字符串的长度。接着,我们设置了一些随后将在函数中用到的协助器变量。然后,我们将所有的字符都设置为小写。在循环里,我们创建了一个新字符串,添加最新字符并通过检查前一个字符是否为空格符来决定该字符的大小写状态。如果前一个字符是空格符,那么下一个字符就应当转换为大写状态。一旦把字符串里所有的字符都循环了一遍,就返回该新字符串。

下面是如何调用这个udf_CorrectCasing函数的一个例子:

SELECT dbo.udf_CorrectCasing(Address) FROM Customers;

下面是如何调用这个函数去更新名为Customers表中的Address列数据的一个例子:

UPDATE Customers

SET Address = dbo.udf_CorrectCasing(Address)

按需而变

上面编写的这个函数只是一个简单的函数,用来把你传递到该函数的所有单词的首字母转换为大写形式。虽然有一定的用处,但很可能并不能满足你对“美化”数据的所有要求。你可能需要将所有类似于DBA、SQL这类缩写名称或者DR、MR等姓名前缀的所有字母都以大写形式呈现,或者还要在这些单词的各个字母后面加上一个句点。

你可以对这个函数进行一些改进,一遍得到你想要的结果。如果你在尝试的过程中失败了,可以重新复制这个脚本再从头开始改编。

Tags:SQL Server 轻松

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接