You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server中DATEPART函数的"yy"与yy的区别及引号用法疑问

在SQL Server中DATEPART参数的引号使用与双引号的特殊用途

嘿,这个细节问题问得好!我来给你理清楚SQL Server里双引号的作用,以及DATEPART的规范写法:

双引号在SQL Server里的特殊用途

在SQL Server中,双引号的行为主要由会话级设置QUOTED_IDENTIFIER控制:

  • 当QUOTED_IDENTIFIER = ON(这是默认设置):双引号被当作分隔标识符使用,用来包裹那些不符合常规标识符规则的对象名(比如包含空格、特殊字符,或者和SQL保留字重名的表/列名)。举个例子:
    -- 当表名有空格时,用双引号(或方括号)包裹才能正常访问
    SELECT * FROM "Sales Data";
    
  • 当QUOTED_IDENTIFIER = OFF:双引号的作用和单引号完全一样,用来包裹字符串常量。

你测试的DATEPART("yy", GETDATE())能运行,是因为yy是合法的标识符,当QUOTED_IDENTIFIER为ON时,双引号包裹的"yy"被识别为标识符,和直接写yy效果一致;就算设置为OFF,"yy"会被当作字符串常量,DATEPART也能正常解析这个参数。

DATEPART的规范写法

SQL Server官方推荐的DATEPART参数写法有两种:

  1. 直接使用不带引号的标识符:这是最简洁也最常用的写法,比如:
    SELECT DATEPART(yy, GETDATE());
    SELECT DATEPART(year, GETDATE()); -- 用完整单词也可以
    
  2. 使用单引号包裹的字符串常量:这种写法也符合规范,可读性也不错:
    SELECT DATEPART('yy', GETDATE());
    SELECT DATEPART('year', GETDATE());
    

至于双引号的写法,虽然能运行,但不推荐作为规范写法:

  • 它的行为依赖QUOTED_IDENTIFIER设置,一旦这个设置被修改(比如某些工具或脚本会手动调整),虽然DATEPART场景下可能不会出错,但养成这种习惯会增加其他场景的潜在风险(比如处理对象名时)。
  • 相比之下,方括号[]是SQL Server里更通用的分隔标识符写法,比双引号的兼容性更好,也更符合大多数SQL Server开发者的习惯。

内容的提问来源于stack exchange,提问作者shaair

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:55:56