如何使用前导零为int数据类型值加前缀?

时间:2012-05-10 03:18:54

标签: sql database-design

是否可以将int值设置为以零开头?示例将是一个ID号,它将是0020192,但它只将其保存为20192,我想可以将其设置为字符串相关类型,但如果可能,请将其保留为Int。

将需要00,因为前3位数字(002)表示员工工作部分,而最后4位数字表示员工的实际数字(0192,第192名员工)

3 个答案:

答案 0 :(得分:4)

在评论中你这样说:

  

实际上它将是一个七位数的id。 0090001,前三位数字(009)将标识员工的工作站,而最后4位数字(0014)将是他的实际员工ID。

这说明你的ID根本不是数字,它们是具有特定内部结构的字符串:

  1. 长七个字符。
  2. 所有字符均为数字。
  3. 前三个字符表示工作站。
  4. 最后四个字符表示员工。
  5. 这是一个恰好看起来像一个数字的字符串。您应该使用char(7)来添加一个CHECK约束来强制执行内部格式(或者尽可能多地使用它)。

    我也没有太多机会用这些ID做任何算术或其他数字的事情,主要是因为它们实际上并不是数字。

    使用char(7)的一个令人愉快的副作用是你的应用程序应该将ID视为字符串,你不必担心会让人感到困惑,并认为0112222是一个八进制数字

    如果可能,您应该使用两个单独的字符串列:

    1. 工作站ID的char(3)
    2. 员工ID的char(4)
    3. 如果数据库中的其他对象使用数字ID,那么也可以在这里使用两个数字,并添加外键来约束数据。

      执行摘要:您的ID不是数字,所以不要试图将它们存储为数字,它们是看起来像数字的字符串,应该作为字符串进行存储和操作。

答案 1 :(得分:2)

试试这段代码

SELECT RIGHT(CONCAT('0000000', 201920),8) AS ID_Number

http://sqlfiddle.com/#!2/7215e/1

答案 2 :(得分:0)

仅显示问题。

如果数据库中的IDNO(autoincrement / int)为201,并且您希望将其显示为10个字符长的格式,例如0000000201

应该是这样的。

select rtrim(replicate('0',abs(len(IDNO)-10)) + CAST(IDNO as varchar)) from IDMaster

只需在首选显示长度上修改10即可。 例如2,所以abs(len(IDNO)-2)

欢呼声。