65.9K
CodeProject 正在变化。 阅读更多。
Home

SQL Server 2005/2008 最常用函数

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.71/5 (56投票s)

2009 年 8 月 15 日

CPOL

8分钟阅读

viewsIcon

369090

此目录和文章可由所有白银会员及以上级别成员编辑。请根据您了解的 SQL Server 2005/2008 中常用的函数来更新此文章。这将把所有内容整合到一篇帖子中。

本文的目标是将 SQL Server 2005/2008 中最常用的函数集中到一篇帖子中。我们在 SQL Server 2005/2008 中经常使用许多函数。本文将是所有这些函数及其恰当示例的统一场所。

但是,我需要您的帮助。此目录和文章可由所有白银会员及以上级别成员编辑。我希望您做的是替换下方目录中的条目,并添加您所知的 SQL Server 2005 或更高版本的所有函数。这将极大地帮助初学者在一个帖子中找到所有这些函数。

目录

目标

本文的目标是将 SQL Server 2005 中最常用的函数集中到一篇帖子中。我们在 SQL Server 2005 中经常使用许多函数。本文将是所有这些函数及其恰当示例的统一场所。

但是,我需要您的帮助。此目录和文章可由所有白银会员及以上级别成员编辑。我希望您做的是替换下方目录中的条目,并添加您所知的 SQL Server 2005 或更高版本的所有函数。这将极大地帮助初学者在一个帖子中找到所有这些函数。

我先开始添加一些关于DateTime函数的条目。我会定期更新文章,但我希望得到大家的大力贡献。请不要忘记在历史记录列表中添加您的名字和 Code Project 个人资料链接。

提前感谢您对我的这项小小倡议的支持。

SQL Server 中的日期时间函数

以下是 SQL Server 中最常用的DateTime函数。

  • GETDATE()
  • DATEADD()
  • DATEPART()
  • DATEDIFF()
  • DATENAME()
  • DAY()
  • MONTH()
  • YEAR()

GETDATE()

GETDATE() 是一个非常常用的方法,它返回系统当前的准确日期和时间。它不接受任何参数。只需像简单函数一样调用即可。

示例

Declare @Date datetime 
set @Date = (SELECT GETDATE());
Print @Date 

输出

Aug 15 2009  9:04PM 

DATEADD()

DATEADD() 用于添加或减去日期时间。它根据添加或减去的间隔返回一个新的日期时间。

通用语法

 DATEADD(datepart, number, date)

datepart 是指定要从中返回新值的日期部分的参数。Number 参数用于增加 datepart。

示例

Declare @Date datetime 
set @Date = (SELECT GETDATE());
print  @Date -- Print Current Date
-- Adding 5 days with Current Date
SELECT DATEADD(day, 5,@Date ) AS NewTime

输出

Aug 15 2009  9:19PM
NewTime
-----------------------
2009-08-20 21:19:15.170

DATEPART()

当我们从日期时间变量中需要日期或时间的一部分时,会使用DATEPART()。我们只能在 SELECT 语句中使用DATEPART()方法。

语法

DATEPART(datepart, date)

示例

-- Get Only Year
SELECT DATEPART(year, GETDATE()) AS 'Year'
-- Get Only Month
SELECT DATEPART(month, GETDATE()) AS 'Month'
-- Get Only hour
SELECT DATEPART(hour, GETDATE()) AS 'Hour

输出

Year
-----------
2009
Month
-----------
8
Hour
-----------
21

DATEDIFF()

DATEDIFF() 是一个非常常用的函数,用于找出两个DateTime元素之间的差值。

语法

DATEDIFF(datepart, startdate, enddate)

示例

-- Declare Two DateTime Variable
Declare @Date1 datetime 
Declare @Date2 datetime 
-- Set @Date1 with Current Date
set @Date1 = (SELECT GETDATE());
-- Set @Date2 with 5 days more than @Date1
set @Date2 = (SELECT DATEADD(day, 5,@Date1 ))
-- Get The Date Difference
SELECT DATEDIFF(day, @Date1, @Date2) AS DifferenceOfDay

输出

DifferenceOfDay
---------------
5 

DATENAME()

DATENAME() 是一个非常常用且最有用的函数,用于从日期时间值中获取日期的名称。

示例

-- Get Today 
SELECT DATENAME(dw, getdate()) AS 'Today Is'
-- Get Mont name
SELECT DATENAME(month, getdate()) AS 'Month'

输出

Today Is
------------------------------
Saturday
Month
------------------------------
August

DAY()

DAY() 用于从任何日期时间对象中获取日期(号)。

示例

SELECT DAY(getdate()) AS 'DAY'

输出

DAY
-----------
15

MONTH()

SELECT MONTH(getdate()) AS 'Month'

输出

Month
-----------
8

YEAR()

SELECT YEAR(getdate()) AS 'Year'

输出

Year
-----------
2009

字符串函数

有些字符串函数在某些时候非常方便。让我们逐一讨论它们。

ASCII()

返回字符表达式最左边字符的 ASCII 码值。

语法
ASCII ( character_expression ) 

参数: character_expression:一个 char 或 varchar 类型的表达式。

返回类型:Int 

示例 

SELECT ASCII('A')  

SET TEXTSIZE 0
SET NOCOUNT ON
-- Create the variables for the current character string position 
-- and for the character string.
DECLARE @position int, @string char(15)
-- Initialize the variables.
SET @position = 1
SET @string = 'The codeProject'
WHILE @position <= DATALENGTH(@string)
   BEGIN
   SELECT ASCII(SUBSTRING(@string, @position, 1)),
      CHAR(ASCII(SUBSTRING(@string, @position, 1)))
    SET @position = @position + 1
   END
SET NOCOUNT OFF

输出

-----------
65
----------- ----
84          T
----------- ----
104         h
----------- ----
101         e
----------- ----
and so on..... 
CHAR() 

将一个int ASCII 码转换为一个字符。  

语法  
CHAR ( integer_expression ) 

参数: integer_expression:一个 0 到 255 之间的整数。如果整数表达式不在此范围内,则返回 NULL。
返回类型:character  
示例 

SET TEXTSIZE 0
SET NOCOUNT ON
DECLARE @intCounter int
SET @intCounter = 0

WHILE (@intCounter<= 255)
	BEGIN
		SELECT 'CHAR - ' + CHAR(@intCounter) + '. ASCII - ' + CONVERT(VARCHAR,@intCounter) 
		SET @intCounter = @intCounter + 1
	END


SET NOCOUNT OFF

输出

CHAR - !. ASCII - 33
------------------------------------------------
CHAR - ". ASCII - 34
------------------------------------------------
CHAR - #. ASCII - 35
------------------------------------------------
CHAR - $. ASCII - 36
------------------------------------------------
CHAR - %. ASCII - 37
------------------------------------------------
CHAR - &. ASCII - 38
------------------------------------------------
CHAR - '. ASCII - 39
------------------------------------------------
CHAR - (. ASCII - 40
------------------------------------------------

and so on.....   

NCHAR() 

返回表示作为参数传递的数字的 Unicode 字符。

语法 
NCHAR ( integer_expression )  

返回类型:character

示例 

SELECT NCHAR(97) 

输出

This will return the leter "a"

DIFFERENCE()

返回一个整数值,该值表示两个字符表达式的 SOUNDEX 值之间的差异。

语法
DIFFERENCE ( character_expression , character_expression )

参数:character_expression:一个 char 或 varchar 类型的表达式。character_expression 也可以是 text 类型;但是,只有前 8,000 字节才具有意义。

返回类型:Int

示例

USE AdventureWorks;
GO
-- Returns a DIFFERENCE value of 4, the least possible difference.
SELECT SOUNDEX('Green'), SOUNDEX('Greene'), DIFFERENCE('Green','Greene');
GO
-- Returns a DIFFERENCE value of 0, the highest possible difference.
SELECT SOUNDEX('Blotchet-Halls'), SOUNDEX('Greene'), DIFFERENCE('Blotchet-Halls', 'Greene');
GO

输出

----- ----- ----------- 
G650  G650  4           

(1 row(s) affected)
                        
----- ----- ----------- 
B432  G650  0           

(1 row(s) affected)

LEFT() 

返回字符串中最左边的字符。

语法
LEFT(string, length

字符串
指定要从中获取最左边字符的字符串。
 
length
指定要获取的字符数。

示例

SELECT LEFT('Marufuzzaman',5)  

输出

Maruf

RIGHT()

返回字符串中最右边的字符。

语法 
RIGHT(string, length

字符串
指定要从中获取最左边字符的字符串。
 
length
指定要获取的字符数。

示例

SELECT RIGHT('Md. Marufuzzaman',12)  

输出

Marufuzzaman 

LTRIM() 

返回一个字符表达式,并删除其开头的空格。

示例

SELECT LTRIM('   Md. Marufuzzaman') 

输出

Md. Marufuzzaman

RTRIM()

返回一个字符字符串,并截断所有结尾的空格。 

示例 

SELECT RTRIM('Md. Marufuzzaman    ') 

输出

Md. Marufuzzaman

REPLACE() 

返回一个字符串,其中所有出现的子字符串都被另一个子字符串替换。

语法
REPLACE(find, replace, string)
查找
指定包含要被替换所有实例的子字符串的字符串。
 
替换
指定要查找的子字符串。
 
字符串
指定要用来替换找到的子字符串的子字符串。
 
示例
SELECT REPLACE('The codeProject is ?.','?', 'your development resource')

输出

 The codeProject is your development resource.

QUOTNAME()

返回一个 Unicode 字符串,其中添加了分隔符,使输入字符串成为有效的 Microsoft SQL Server 分隔标识符。

语法
QUOTENAME ( 'character_string' [ , 'quote_character' ] )  
参数
' character_string '
是一个 Unicode 字符数据字符串。character_string 是 sysname 类型,最多 128 个字符。大于 128 个字符的输入将返回 NULL。

' quote_character '
是一个用作分隔符的单字符字符串。可以是单引号 ( ' )、左或右方括号 ( [ ] ),或双引号 ( " )。如果未指定 quote_character,则使用方括号。

返回类型nvarchar(258)

示例
以下示例获取字符字符串 abc[]def,并使用 [ 和 ] 字符创建有效的 SQL Server 分隔标识符。

SELECT QUOTENAME('abc[]def')
输出
[abc[]]def] 

REVERSE()

以反向顺序返回一个字符表达式。 

示例

SELECT REVERSE('namazzufuraM .dM')

输出 

 Md. Marufuzzaman 

CHARINDEX

CharIndex 返回字符串或字符在另一个字符串中的第一次出现。CharIndex 的格式如下:

CHARINDEX ( expression1 , expression2 [ , start_location ] )
这里expression1是要在expression2中查找的字符字符串。因此,如果您想在单词Abhijit中搜索ij,我们将使用ij作为expression1Abhijit作为expression2start_location是一个可选的整数参数,它标识搜索字符串的起始位置。现在,让我们看一些例子。

SELECT CHARINDEX('SQL', 'Microsoft SQL Server') 

输出

11


所以它将从 1 开始搜索,直到找到完整的字符串元素,并返回其第一次出现的位置。如果找不到搜索的字符串,结果将是0

我们还可以指定要搜索的字符串的Start_Location

示例

SELECT CHARINDEX('SQL', 'Microsoft SQL server has a great SQL Engine',12)

因此,在上面的示例中,输出可能是 34,因为我们指定了 StartLocation 为 12,这大于初始 SQL 位置 (11)。

PATINDEX

与之相对,PatIndex用于在表达式中搜索模式。CharIndexPatIndex的区别在于后者允许使用通配符。

PATINDEX ( '%pattern%' , expression)

这里的第一个参数接受一个带有通配符的模式,如'%'(表示任何字符串)或 '_'(表示任何字符)。

例如
PATINDEX('%BC%','ABCD')

输出: 

2


PATINDEX 的另一个灵活性是您可以指定模式中允许的字符数。例如,您想查找包含单词 "Bread" 或 "bread" 的所有记录,可以使用以下方法:

SELECT PATINDEX('%[b,B]read%', 'Tommy loves Bread') 

在此示例中,我们在方括号中同时提到了 b 和 B。结果将是 13,这与搜索'Tommy loves bread'时相同。

LEN

Len 是一个返回字符串长度的函数。这是每个人都会使用的最常见和最简单的函数。Len 函数会忽略结尾的空格。

SELECT LEN('ABHISHEK IS WRITING THIS')

这将输出 24,这与写入LEN('ABHISHEK IS WRITING THIS ')时相同,因为 LEN 不会计算结尾空格。

STUFF


Stuff 是另一个 TSql 函数,用于删除字符串中指定长度的字符,并用另一组字符替换。STUFF 的通用语法如下:

STUFF(character_expression1, start, length, character_expression2)Character_Expression1 表示要应用 stuff 的字符串。start 指示character_expression1中字符的起始位置,length 是需要替换的字符长度。character_expression2 是将替换到起始位置的字符串。

让我们来看一个例子。

SELECT STUFF('SQL SERVER is USEFUL',5,6,'DATABASE')

因此,结果将是
SQL DATABASE is USEFUL

SUBSTRING


Substring 从给定的 character_expression 返回字符串的一部分。Substring 的通用语法如下:

SUBSTRING(expression, start, length)

在这里,函数从 start 位置获取 length 长度的字符串。让我们看下面的例子:

SELECT OUT = SUBSTRING('abcdefgh', 2, 3)

输出将是 "bcd"。
注意:substring 也适用于 ntext、VARCHAR、CHAR 等。

LOWER / UPPER


另一个简单但实用的函数是 Lower / UPPER。它们只会更改字符串表达式的大小写。例如,

SELECT UPPER('this is Lower TEXT') 


输出
THIS IS LOWER TEXT

致所有白银会员及以上级别成员的通知

此目录和文章可由所有白银会员及以上级别成员编辑。我希望您做的是替换下方目录中的条目,并添加您所知的 SQL Server 2005 或更高版本的所有函数。这将极大地帮助初学者在一个帖子中找到所有这些函数。

提前感谢您支持我的这项小小倡议。

历史

草稿版本发布:2009 年 8 月 15 日 - Abhijit Jana

第二版:2009 年 8 月 16 日 - Abhishek Sur
更新:添加了字符串函数。 

第三版:2009 年 8 月 18 日 - Md. Marufuzzaman
更新:添加了一些更有用的字符串函数。 

© . All rights reserved.