我正在尝试将手动MS Access进程迁移到自动SQL进程
除最后一栏外,我的每项工作都按预期进行。
以下是示例表数据,然后在下面是我尝试将数据更改为。
10903
1091
319
2968A
782R
需要看起来像这样
10903
01091
00391
02968
00782
第一列中的任何字符串都需要被拆分为数字,如果字符串小于5则在前面添加零。
我理解如何在Access中进行对话,如果能够访问SQL Server 2012或更高版本,那就没关系。
思想?
我是否需要使用SET和一长串嵌套的IF?
答案 0 :(得分:1)
借用the answer from here,并假设你总是想要一个五位数输出,你会看到这样的东西:
DECLARE @textval NVARCHAR(30)
SET @textval = '2968A'
SELECT RIGHT('00000' + CAST(LEFT(SUBSTRING(@textval, PATINDEX('%[0-9.-]%', @textval), 8000),
PATINDEX('%[^0-9.-]%', SUBSTRING(@textval, PATINDEX('%[0-9.-]%', @textval), 8000) + 'X') -1) AS VARCHAR(5)), 5)
但是,如果您的号码超过五位数,则需要对其进行修改以将其考虑在内。无论如何,将两个“8000”值替换为varchar列的长度。
要针对您的表运行此操作,请将所有出现的@textval替换为您的列名(并添加FROM / WHERE /任何其他子句)。
答案 1 :(得分:0)
从here获得答案并填写结果。因为你已经有了字符,所以不需要转换为varchar。
create table YourTable
(
Data varchar(100)
);
insert into YourTable values
('10903'),
('1091' ),
('319' ),
('2968A'),
('782R')
Select Right('00000'+ isnull(Left(
SubString(Data, PatIndex('%[0-9.-]%', Data), 8000),
PatIndex('%[^0-9.-]%', SubString(Data, PatIndex('%[0-9.-]%', Data), 100) + 'X')-1),
''),5)
from YourTable