这是使用前导零选择的代码:
SELECT RIGHT('00000'+ CONVERT(VARCHAR,Asset_No),6)
FROM schemaAsset.SystemDefined
如何向带有前导零的列Asset_no插入值?
示例是我只在“Asset_no”列中插入“1”,但在代码中,它将插入“000001”。而且当我插入两个数字如26时,它将插入为“000026”。长度不会改变。这在SQL Server中是否可行?
答案 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')