1

是否可以将 int 值设置为从零开始?示例就像一个 ID 号,0020192但它只将其保存20192

00 是必需的,因为前 3 位数字 (002) 表示员工工作部分,而后 4 位是员工的实际编号(0192,第 192 位员工)

4

3 回答 3

4

在您的评论中,您这样说:

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

也就是说,您的 ID 实际上根本不是数字,它们是具有特定内部结构的字符串:

  1. 七个字符长。
  2. 所有字符都是数字。
  3. 前三个字符标识工作站。
  4. 最后四个字符标识员工。

这是一个恰好看起来像数字的字符串。您应该char(7)为此使用 a 并添加一个 CHECK 约束来强制执行内部格式(或尽可能多地使用它)。

我也看不到用这些 ID 做任何算术或其他数字的事情的机会很大,主要是因为它们实际上不是数字。

使用它的一个令人愉快的副作用char(7)是您的应用程序应该将 ID 视为字符串,您不必担心会混淆并认为这0112222是一个八进制数。

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

  1. Achar(3)为工作站 ID。
  2. 和一个char(4)用于员工 ID。

如果您在数据库的其他地方使用数字 ID 有这两个对象,那么在这里也使用两个数字并添加外键来约束您的数据。

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

于 2012-05-10T03:54:24.150 回答
2

试试这段代码

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

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

于 2012-05-10T03:45:06.173 回答
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)

干杯。

于 2012-05-10T04:02:57.547 回答