SQL Server 里的日期和时间函数

来源:互联网 发布:mac git 添加文件夹 编辑:程序博客网 时间:2024/05/21 11:03

   这些标量函数对日期和时间输入值执行操作,并返回一个字符串、数字值或日期和时间值。

  下表列出日期和时间函数以及它们的确定性属性。

DATEADD 具有确定性

DATEDIFF 具有确定性

DATENAME 不具有确定性

DATEPART 除了用作

DATEPART (dw, date) 外都具有确定性。dw 是工作日的日期部分,取决于由设置每周第一天的

SET DATEFIRST 所设置的值

DAY 具有确定性

GETDATE 不具有确定性

GETUTCDATE 不具有确定性

MONTH 具有确定性

YEAR 具有确定性

     确定性函数和非确定性函数所有的函数都是确定性或非确定性的: 在使用特定的输入值集调用确定性函数的任何时候,它们总是返回相同的结果。 在每次使用特定的输入值集调用非确定性函数时,它们可能返回不同的结果。 函数是否为确定性函数或非确定性函数称为函数的确定性。 例如,DATEADD 内置函数是确定性函数,因为对于其三个参数的任何给定参数值集总是返回相同的结果。GETDATE 不是确定性函数,因为总是使用相同的参数唤醒调用它,而它在每次执行时返回结果都不同。

 --------------------------------------------------------------------------------

打印出 pubs 数据库中标题的时间结构的列表。此时间结构表示当前发布日期加上 21 天。

USE pubs

GO

SELECT DATEADD(day, 21, pubdate) AS timeframe FROM titles

GO

--------------------------------------------------------------------------------

确定在 pubs 数据库中标题发布日期和当前日期间的天数。

USE pubs

GO

SELECT DATEDIFF(day, pubdate, getdate()) AS no_of_days FROM titles

GO

--------------------------------------------------------------------------------

从 GETDATE 返回的日期中提取月份名。SELECT DATENAME(month, getdate()) AS 'Month Name'

 --------------------------------------------------------------------------------

GETDATE 函数返回当前日期;然而,比较时并不总是需要完整的日期信息(通常只是对日期的一部分进行比较)。

SELECT DATEPART(month, GETDATE()) AS 'Month Number'

--------------------------------------------------------------------------------

日期部分

缩写

 year yy, yyyy

quarter qq, q

month mm, m

dayofyear dy, y day dd, d

week wk, ww weekday dw

Hour hh

minute mi, n

second ss, s

millisecond ms

以上这个表如果你会的语言多的话可能会觉得太乱了, 各种语言有些地方是不一样的,但不知道您有没有发现, 不管什么语言, 他们都可以直接用全称而不必非要用缩写.这个我比较喜欢,什么时候不会写就直接用全称.原创作者:柳永法(yongfa365)'Blog

----------------------------------------------------

CHARINDEX函数返回字符或者字符串在另一个字符串中的起始位置。

CHARINDEX函数调用方法如下:

CHARINDEX ( expression1 , expression2 [ , start_location ] ) Expression1是要到expression2中寻找的字符中,start_location是CHARINDEX函数开始在expression2中找expression1的位置。

CHARINDEX函数返回一个整数,返回的整数是要找的字符串在被找的字符串中的位置。

假如CHARINDEX没有找到要找的字符串,那么函数整数“0”。让我们看看下面的函数命令执行的结果: CHARINDEX('SQL', 'Microsoft SQL Server') 这个函数命令将返回在“Microsoft SQL Server”中“SQL”的起始位置,在这个例子中,CHARINDEX函数将返回“S”在“Microsoft SQL Server”中的位置11。接下来,我们看这个CHARINDEX命令: CHARINDEX('7.0', 'Microsoft SQL Server 2000') 在这个例子中,CHARINDEX返回零,因为字符串“7.0” 不能在“Microsoft SQL Server”中被找到。接下来通过两个例子来看看如何使用CHARINDEX函数来解决实际的T-SQL问题。

-------------------------------------

将某种数据类型的表达式显式转换为另一种数据类型。

CAST 和 CONVERT 提供相似的功能。

语法使用 CAST:CAST ( expression AS data_type )使用 CONVERT:CONVERT (data_type[(length)], expression [, style])参数expression是任何有效的 Microsoft SQL Server" 表达式。

有关更多信息,请参见表达式。

data_type目标系统所提供的数据类型,包括 bigint 和 sql_variant。

不能使用用户定义的数据类型。有关可用的数据类型的更多信息,请参见数据类型。lengthnchar、nvarchar、char、varchar、binary 或 varbinary 数据类型的可选参数。

style日期格式样式,借以将 datetime 或 smalldatetime 数据转换为字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型);或者字符串格式样式,借以将 float、real、money 或 smallmoney 数据转换为字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型)。 将某种数据类型的表达式显式转换为另一种数据类型。

有关可用的数据类型的更多信息,请参见数据类型。日期格式样式,借以将 datetime 或 smalldatetime 数据转换为字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型);或者字符串格式样式,借以将 float、real、money 或 smallmoney 数据转换为字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型)。当转换为字符数据时输出。 隐性转换对于用户是不可见的。 SQL Server 自动将数据从一种数据类型转换成另一种数据类型。例如,如果一个 smallint 变量和一个 int 变量相比较,这个 smallint 变量在比较前即被隐性转换成 int 变量。显式转换使用 CAST 或 CONVERT 函数。CAST 和 CONVERT 函数将数值从一个数据类型(局部变量、列或其它表达式)转换到另一个数据类型。例如,下面的 CAST 函数将数值 $157.27 转换成字符串 ''$157.27'':CAST ( $157.27 AS VARCHAR(10) )CAST 函数基于 SQL-92 标准并且优先于 CONVERT。当从一个 SQL Server 对象的数据类型向另一个转换时,一些隐性和显式数据类型转换是不支持的。例如,nchar 数值根本就不能被转换成 image 数值。nchar 只能显式地转换成 binary,隐性地转换到 binary 是不支持的。nchar 可以显式地或者隐性地转换成 nvarchar。当处理 sql_variant 数据类型时,SQL Server 支持将具有其它数据类型的对象隐性转换成 sql_variant 类型。然而,SQL Server 并不支持从 sql_variant 数据隐性地转换到其它数据类型的对象。

----------------------------------------------------------------------

trim 函数:去除数据中的空格。

rtrim代表去除右边的空格,

ltrim代表去除左边的空格例子:update TPrcJi set 中标项目=rtrim(中标项目),品牌=rtrim(品牌)去除 TPrcJi“中标项目”“品牌”右边的空格

----------------------------------------------------------------------

注意:这里说的delete是指不带where子句的delete语句 相同点 truncate和不带where子句的delete, 以及drop都会删除表内的数据 不同点: 1. truncate和 delete只删除数据不删除表的结构(定义) drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态. 2.delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发. truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger. 3.delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动 显然drop语句将表所占用的空间全部释放 truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage; truncate会将高水线复位(回到最开始). 4.速度,一般来说: drop>; truncate >; delete 5.安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及 使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够大. 想删除表,当然用drop 想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete. 如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据

 

http://cache.baidu.com/c?m=9d78d513d98202f14fede53f5a569331594380123cd5d21768d4e216d524001e506692fb61624b5bc4c50d7071af5e2dece74771207254a09ab89f3adeace52a38f85423011b9206528d16f58d0067d621e347f4f542f0ba8762c0f58494c854249b0e5a67d9a0d2014155d73fae4964fefddf1f4a4213beea6362fc5a767f952846bd45fbe6353d54d5f1dc5f46d42aa73b57c8f1&p=8c7cc64ad1934ea853b88a0c5a48&user=baidu&fm=sc&query=sql+server+2000+%28ltrim%28rtrim%28%5B%B2%C4%C1%CF%B1%E0%BA%C5%5D%29%29+%3C%3E+%27%27%29&qid=8f783be40c368d9b&p1=2