如何在SQL Server中插入前导零

时间:2013-03-06 00:59:55

标签: sql sql-server-2005 insert

这是使用前导零选择的代码:

SELECT RIGHT('00000'+ CONVERT(VARCHAR,Asset_No),6) 
  FROM schemaAsset.SystemDefined

如何向带有前导零的列Asset_no插入值?

示例是我只在“Asset_no”列中插入“1”,但在代码中,它将插入“000001”。而且当我插入两个数字如26时,它将插入为“000026”。长度不会改变。这在SQL Server中是否可行?

4 个答案:

答案 0 :(得分:6)

执行此操作的一种方法是使用INSTEAD OF触发器。

USE tempdb;
GO

CREATE TABLE dbo.whatever
(
  Asset_No VARCHAR(6)
);
GO

CREATE TRIGGER dbo.fix_whatever
ON dbo.whatever
INSTEAD OF INSERT
AS
BEGIN
  SET NOCOUNT ON;
  INSERT dbo.whatever(Asset_No /*, other columns */)
    SELECT RIGHT('000000' + CONVERT(VARCHAR(6), Asset_No), 6)
      /*, other columns */
    FROM inserted;
END
GO

INSERT dbo.whatever(Asset_No) SELECT '22';
GO

SELECT Asset_No FROM dbo.whatever;
GO

结果:

Asset_No
--------
000022

答案 1 :(得分:2)

如果要在SQL Server中执行填充,可以使用INSERT语句执行类似的操作:

DECLARE @Asset_no INT = 12;

INSERT INTO schemaAsset.SystemDefined (Asset_no)
  SELECT RIGHT('00000'+ CONVERT(VARCHAR(6),@Asset_No),6)

答案 2 :(得分:0)

下面的脚本允许您使用表中每行的数字填充列。这将为您提供从2000年开始的数字。第一个条目是0002000。

Declare @id varchar(15)  
set @id = '1999'  
update sometable  
set @id = id = replace(STR(@id + 1,7),' ', '0')  
go

答案 3 :(得分:-2)

对于Oracle:

lpad(强制转换(NUMERIC_VAR为VARCHAR2(5 BYTE)),5,' 00000')