【问题标题】:SQL Getting 2 digit numbers from row_number Over () functionSQL 从 row_number Over() 函数中获取 2 位数字
【发布时间】:2014-03-21 23:20:25
【问题描述】:

是否可以使用下面的函数获取2位数字?

Row_number () Over(Order By UH.Stuff) AS HSN

我希望查询返回 01 、 02 、 03 而不是 1,2,3...

【问题讨论】:

  • 编号为 100 的行呢?

标签: sql-server tsql


【解决方案1】:

做这样的事情:

RIGHT('0' + CONVERT(VARCHAR,ROW_NUMBER() OVER (ORDER BY UH.Stuff)), 2) AS HSN

【讨论】:

  • 编号为 100 的行呢?
  • 使用此解决方案,第 100 行将输出为“00”。第 101 行将输出为“01”,依此类推。但这不是问题所在。问题是如何仅输出 2 位数字,这正是我的解决方案所做的。我相信 OP 知道他的 UH.Stuff 表包含多少行。
  • 他只知道他的 UH.Stuff 表今天包含了多少行。恕我直言,应该为表示层保存左侧填充,而不是查询。
  • @alroc - DB 层的左填充可能很有用,例如,如果您想生成 VARCHAR 类型的连续订单号,它应该可以按升序排序,(“ORD-0001” 、“ORD-0002”、“ORD-0010”等),但除此之外,我同意。该解决方案取决于 OP 确定的事实,即 UH.Stuff 是一个静态表,其中记录数永远不会超过 99。
  • 就逻辑而言,这里的数字可能只有 2 位数字,所以这个逻辑现在为我做了,干杯。
【解决方案2】:

你不需要使用Convert()函数:

要获得 2 位数字:

RIGHT(100 + Row_number () Over(Order By UH.Stuff), 2) AS HSN

3 位数:

RIGHT(1000 + Row_number () Over(Order By UH.Stuff), 3) AS HSN

等等……

【讨论】:

    【解决方案3】:

    您可以使用此方法在 SQL Server 中对数字进行零填充:

    select right(1000000 + Row_number () Over(Order By UH.Stuff), 2) AS HSN
    

    这样做是在您的号码上添加一个大数字。函数right() 自动将其转换为字符串。最右边的两位数字将补零。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-16
      • 2011-12-10
      • 1970-01-01
      • 1970-01-01
      • 2021-11-20
      • 2014-10-23
      相关资源
      最近更新 更多