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

T-SQL是否支持数字分隔符拆分大数字字面量提升源码可读性

T-SQL 数字分隔符特性支持说明

核心结论

截止目前所有正式发布的T-SQL版本(含SQL Server 2022、Azure SQL Database、Azure SQL Managed Instance最新可用版本),均不支持类似JavaScript、C#的下划线数字分隔符(numeric/digit separators)特性。
你之前测试的SELECT 3_800_000写法确实会被T-SQL词法解析器识别为「返回数字常量3,同时给该列设置别名_800_000」,等价于SELECT 3 AS [_800_000],完全无法得到预期的3800000数值,直接使用会引发逻辑错误。

源码层面提升大数字字面量可读性的可行方案

以下方案均不改变实际执行逻辑,不会额外带来性能损耗,仅用于提升源码易读性:

  • 提前定义变量/常量承载大数值
    这是生产环境最推荐的写法,既可以统一管理魔法值,也可以通过命名、注释直接说明数值含义:
    -- 配置项:用户分层阈值,对应380万累计积分
    DECLARE @VIPPointThreshold BIGINT = 3800000;
    
    SELECT * FROM UserInfo WHERE TotalPoint >= @VIPPointThreshold;
    
    对于需要跨批次、跨语句复用的固定数值,也可以定义为内联标量函数返回常量值,SQL Server优化器会直接将其折叠为对应常量,不会有函数调用开销。
  • 用常量算术表达式拆分数字
    如果不想额外定义变量,可以通过乘10的整数次幂的方式按量级拆分数字,查询优化器在执行计划生成阶段会提前计算好常量表达式的最终值,运行时无额外计算成本:
    -- 等价于直接写3800000
    SELECT * FROM OrderLog WHERE TotalAmount >= 3 * 1000000 + 800 * 1000;
    
  • 紧邻字面量添加注释说明
    对于仅单次使用的大数值,可以直接在数值后添加行内注释标注量级、含义,不影响语法解析:
    SELECT * FROM SysConfig WHERE ConfigValue = 3800000 /* 单实例最大连接数阈值 */
    

注意:不要尝试通过添加空格、下划线等符号直接拆分数字字面量,这类写法要么触发语法错误,要么会被解析为列别名,导致查询逻辑不符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:22:17