SQL SERVER函数大全 下载本文

在下图所示的结果中,显示了两个不同的列,分别是名字和姓氏。

LOWER()和UPPER()函数

这两个函数很容易理解,它们用于将字符串中所有字符分别都转换为小写和大写,这在比较用户输入或者存储用于比较的字符串时是非常有用的。字符串比较通常是区分大小写的,这取决于SQL Server安装时的设置。如果和其他的字符串操纵函数一起使用,就可以将字符串转换为合适的大小写,以便存储或显示。以下例子说明混合大小写的名字,假设名字中的第2个大写子字符串前只包含一个空格,但在特殊情况下也有一些名字是没有空格的。这个例子很容易通过扩展来处理包含其他类型的混合大小写名字(如以MC开头的名字,带连接号的名字等)。 DECLARE @LastName varchar(25), @SpaceIndex tinyint SET @LastName = 'mc donald' -- Test value -- Find space in name: SET @SpaceIndex = CHARINDEX(' ' , @LastName) IF @SpaceIndex > 0 -- Space: Capitalize first & substring SELECT UPPER(LEFT(@LastName, 1)) + LOWER(SUBSTRING(@LastName, 2, @SpaceIndex - 1)) + UPPER(SUBSTRING(@LastName, @SpaceIndex + 1, 1)) + LOWER(SUBSTRING(@LastName, @SpaceIndex + 2, LEN(@LastName))) ELSE -- No space: Cap only first char. SELECT UPPER(LEFT(@LastName, 1)) + LOWER(SUBSTRING(@LastName, 2, LEN(@LastName))) 这个脚本将返回MC Donald。还可以对这个例子进行扩展,以处理姓氏包含撇号的情况。在这个例子的业务规则中,空格是不考虑的。如果找到了撇号,就将后面的字符全部转为大写。请注意如果要在脚本中测试撇号,就必须输入两次撇号(' '),以表明这是一个文字,而不是一对单引号。姓氏中只存储一个撇号。

DECLARE @LastName varchar(25), @SpaceIndex tinyint, @AposIndex tinyint SET @LastName = 'o''malley' -- Test value -- Find space in name: SET @SpaceIndex = CHARINDEX(' ', @LastName) -- Find literal ' in name: SET @AposIndex = CHARINDEX('''', @LastName) IF @SpaceIndex > 0 -- Space: Capitalize first & substring SELECT UPPER(LEFT(@LastName, 1)) + LOWER(SUBSTRING(@LastName, 2, @SpaceIndex - 1)) + UPPER(SUBSTRING(@LastName, @SpaceIndex + 1, 1)) + LOWER(SUBSTRING(@LastName, @SpaceIndex + 2, LEN(@LastName))) ELSE IF @AposIndex > 0 -- Apostrophe: Cap first & substring SELECT UPPER(LEFT(@LastName, 1)) + LOWER(SUBSTRING(@LastName, 2, @AposIndex - 1)) + UPPER(SUBSTRING(@LastName, @AposIndex + 1, 1)) + LOWER(SUBSTRING(@LastName, @AposIndex + 2, LEN(@LastName))) ELSE -- Nospace: Cap only first char. SELECT UPPER(LEFT(@LastName, 1)) + LOWER(SUBSTRING(@LastName, 2, LEN(@LastName))) 这个脚本返回O'Malley。 LTRIM()和RTRIM()函数

这两个函数分别返回将字符串的左边和右边的空白修剪掉之后的字符串: DECLARE @Value1 char(10), @Value2 char(10) SET @Value1 = 'One' SET @Value2 = 'Two' SELECT @Value1 + @Value2 SELECT CONVERT(varchar(5), LEN(@Value1 + @Value2)) + ' characters long. ' SELECT RTRIM(@Value1) + RTRIM(@Value2) SELECT CONVERT(varchar(5), LEN(RTRIM(@Value1) + RTRIM(@Value2))) + ' characters long trimmed. ' 结果如下:

REPLACE()函数

REPLACE()函数可以把字符串中的某个字符或某个子字符串替换为另一个字符或者子字符串,该函数可以用于全局查找和替换工具中。 DECLARE @Phrase varchar(1000) SET @Phrase = 'I aint gunna use poorgrammar when commenting script and I aint gunna complain about it. ' SELECT REPLACE(@Phrase, 'aint', 'am not') REPLICATE()和SPACE()函数

在需要将一些字符重复填充进一个字符串时,这两个函数是非常有用的。这里也使用SUBSTRING()例子中的临时表为每个名字填满20个字符,然后将20减去各个字符串的长度,以便将正确的值传递给REPLICATE()函数:

SELECT FullName + REPLICATE('*', 20 - LEN(FullName)) FROM #MyNames 结果是每个名字后面都填满了星号,各个名字的总长度都是20个字符: Fred Flintstorle***** Wilrna Flintstone**** Barney Rubble*******

Betty Rubble******** George Jetson******** Jane Jetson**********

SPACE()函数与上述函数类似,区别在于该函数使用空格进行填充。它返回一个由空格组成的字符串,空格的个数由参数定义。

SELECT FullName + SPACE(20 - LEN(FullName)) FROM #MyNames 如果返回\表不存在\的错误,只需再次运行本文前面\函数\一节的CREATE TABLE脚本即可。 REVERSE()函数

顾名思义,这个函数用于将字符串中的字符颠倒过来。这在处理连接列表中的单个字符值时将会被用到。

SELECT REVERSE('The stars near Mars are far from ours. ') 结果为:.sruo morf raf era sraM raen srats ehT STUFF()函数

这个函数可将字符串中的一部分替换为另一个字符串。它本质上是将一个字符串以特定的长度插入另一个字符串中的特定位置上。这对于源值与目的值的长度不一样的字符串替换是很有用的。下列代码用于将字符串中的价格替换为109.95:

Please submit your payment for 99.95 immediately.

价格值是从第32个字符开始的,有5个字符长。在这个位置上插入的子字符串有多长并不重要,只需要知道需要删除多少个字符就可以了。

SELECT STUFF('Please submit your payment for 99.95 immediately. ', 32, 5, '109.95')

结果为:Please submit your payment for 109.95 immediately. QUOTENAME()函数

这个函数和SQL Server对象名组合使用,以将结果传递给表达式。它只用于给输入的字符串加一对方括号,并返回新形成的字符串。如果参数包含保留的分隔符或者封装字符(比如引号或括号),这个函数将修改字符串,以便SQL Server能将结果字符串中的这类字符当成文本字符。如下面的例子所示,查询的结果如图6-10所示。 SELECT QUOTENAME(COLUMN_NAME) AS ColumnName FROM INFORMATION_SCHEMA. COLUMNS