设为首页 收藏本站
查看: 922|回复: 0

[经验分享] SQL Server 轻松修改数据的大小写

[复制链接]

尚未签到

发表于 2016-11-5 06:35:40 | 显示全部楼层 |阅读模式
无论是从网站、内部应用程序,还是从文件将数据输入到SQL Server系统中,数据的展示都是一个应当始终关注的问题。

  【IT专家网独家】本文我们将创建一个在更新数据或以一种让人看起来顺眼的方式为终端用户展示数据方面非常有用的函数。本文的例子适用于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等姓名前缀的所有字母都以大写形式呈现,或者还要在这些单词的各个字母后面加上一个句点。

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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-295865-1-1.html 上篇帖子: 本人收藏的Sql server经典t-sql语句(备忘录,持续更新中) 下篇帖子: Ant执行SQL server 存储过程时的一个问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表