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

基于dbo.digits表构建含3次交叉连接的0-999带前导零字符序列

嘿,这就帮你搞定这个生成000到999带前导零数字字符串的SQL需求!

完整解决方案代码

我们通过三次自连接dbo.digits表(分别指定别名Hundreds、Tens、Units)生成所有百位、十位、个位的组合,再拼接成带前导零的三位字符串。这里有两种实现方式,你可以根据自己的SQL Server版本选择:

方式一:通用字符串拼接法(兼容所有SQL Server版本)

SELECT CharacterNumbersFromZeroTo999 = 
    RIGHT('0' + CAST(Hundreds.n - 1 AS VARCHAR(1)), 1) +
    RIGHT('0' + CAST(Tens.n - 1 AS VARCHAR(1)), 1) +
    RIGHT('0' + CAST(Units.n - 1 AS VARCHAR(1)), 1)
FROM dbo.Digits AS Hundreds
CROSS JOIN dbo.Digits AS Tens
CROSS JOIN dbo.Digits AS Units
ORDER BY CharacterNumbersFromZeroTo999;

方式二:使用FORMAT函数(SQL Server 2012及以上版本)

这种方式代码更简洁易读:

SELECT CharacterNumbersFromZeroTo999 = 
    FORMAT((Hundreds.n - 1) * 100 + (Tens.n - 1) * 10 + (Units.n - 1), '000')
FROM dbo.Digits AS Hundreds
CROSS JOIN dbo.Digits AS Tens
CROSS JOIN dbo.Digits AS Units
ORDER BY CharacterNumbersFromZeroTo999;

关键细节解释

  • 三次CROSS JOIN:因为dbo.digits有10行数据,三次笛卡尔积会生成10*10*10=1000行结果,正好覆盖000到999的所有三位数字组合。
  • n-1的转换:由于dbo.digits的n取值是1到10,我们用n-1把它转换成0到9的数字,这样才能生成从0开始的完整序列。
  • 前导零处理:
    • 方式一中,RIGHT('0' + CAST(...) AS VARCHAR(1)), 1)确保每个数字都被格式化为1位字符串,哪怕是0也能保留为'0',拼接后自然形成三位带前导零的格式。
    • 方式二中,FORMAT(数值, '000')直接把0到999的数值格式化为三位字符串,自动补前导零,非常直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:06:29