日期和时间

本文介绍了SQL Server中日期和时间的处理,包括日期范围筛选、日期时间函数如CURRENT_TIMESTAMP、CAST、CONVERT、PARSE等的使用,以及DATEADD、DATEDIFF等函数的应用。同时,讲解了如何高效使用索引避免全表扫描,和如何处理时区问题。还提到了查询元数据的相关工具,如目录视图和信息架构视图。
摘要由CSDN通过智能技术生成

日期范围筛选

筛选日期范围时很自然的会想到 YEAR、MONTH 函数。例如筛选2017年2月创建的公司:

SELECT Name, CreateTime FROM Companies WHERE YEAR(CreateTime)=2017 AND MONTH(CreateTime)=2

但是,在筛选列上应用操作时,SQL Server 不能以有效方式使用索引,而进行全表扫描。我们应尽量避免在筛选列上执行操作,可以通过修改谓词,从而高效使用索引。

SELECT Name, CreateTime FROM Companies WHERE CreateTime>='20170201' AND CreateTime<'20180301'

日期和时间函数

  1. 当前日期和时间

    SELECT
       [GetDate]=GETDATE(),                     -- DATETIME       当前日期和时间
       [CurrentTimestamp]=CURRENT_TIMESTAMP,    -- DATETIME       等同于GETDATE,但是遵从 ANSI SQL
       [GetUTCDate]=GETUTCDATE(),               -- DATETIME       当前UTC日期和时间(通用协调时间)
       [SysDatetime]=SYSDATETIME(),             -- DATETIME2      当前日期和时间
       [SysUTCDatetime]=SYSUTCDATETIME(),       -- DATETIME2      当前UTC日期和时间(通用协调时间)
       [SysDatetimeOffset]=SYSDATETIMEOFFSET()  -- DATETIMEOFFSET 包含时区偏移量的当前日期时间

    CURRENT_TIMESTAMP 和 GETDATE 返回相同的结果,但是前者是标准函数,建议使用前者。SQL Server 没有仅返回当前系统日期或系统时间的函数,不过可以通过 CAST 把 CURRENT_TIMESTAMP 或 SYSDATETIME 转换到 DATE 或 TIME了类型:

    SELECT
        CurrentDate=CAST(SYSDATETIME() AS DATE),
        CurrentTime=CAST(SYSDATETIME() AS TIME)
  2. CAST、CONVERT 和 PARSE 函数,以及 TRY_对应函数
    CAST、CONVERT 和 PARSE 函数用于将输入值转换为目标类型,如果转换成功,则函数返回转换后的值,否则会导致查询失败。3个函数分别都有对应的称为 TRY_CAST、TRY_CONVERT、TRY_PARSE 的函数。每个前缀为 TRY_的函数接受与其对应函数相同的输入,执行相同的操作,但前缀为 TRY_的函数接受的输入如果不能转换为目标类型,函数会返回 NULL,而不是查询故障。
    语法:
         CAST(value AS datatype)
         TRY_CAST(value AS datatype)
         CONVERT(datatype,value[,style_number])
         TRY_CONVERT(datatype,value[,style_number])
         PARSE(value AS datetype [USING culture])
         TRY_PARSE(value AS datetype [USING culture])
    3个基本函数转输入的 value 到指定的目标 datatype。CONVERT 的第三个可选参数 style_number 可以指定转换的样式,可以在 SQL Server 2017文档的CAST and CONVERT(Transact-SQL)部分找到完整的样式编号列表以及它们的含义。同样,PARSE 函数也支持一个区域性说明参数,参见SQL Server 2017文档PARSE (Transact-SQL)
    当转换字符串为日期或时间数据类型时,某些字符串的格式是与语言相关的。推荐使用与语言无关的格式,或在使用 CONVERT/PARSE 函数时显示地指定样式编号或区域编号,这样无论运行的登录语言是什么,代码能够以相同的方式解释。CAST 是 ANSI,而 CONVERT 和 PARSE 不是,所以除非需要使用样式编号或区域编号,不然建议使用 CAST 函数。

    SELECT CAST('20180725' AS DATE)                                    -- 2018-07-25
    SELECT CONVERT(CHAR(8), CURRENT_TIMESTAMP, 112)                    -- 20180725
    SELECT 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值