我们有一个大表(5608782行并且正在增长)有3列Zip1,Zip2,距离
所有列目前都是int,我们希望将此表转换为使用varchars进行国际使用,但需要对新表进行大量导入转换zip< 5位到0填充的varchars 123变成00123等。有没有办法在每一行上循环并以编程方式进行翻译?
答案 0 :(得分:4)
一个简单的RIGHT将在SQL Server中执行
INSERT
newTable (...
SELECT
RIGHT('00000' + CAST(Zip AS varchar(5)), 5),
...
FROM
OldTable
答案 1 :(得分:2)
以下示例假设您正在使用MS SQL Server。有关复制功能的帮助,请参阅here。
insert NewZipTable
(Zip1,
Zip2,
Distance)
select replicate('0', 5 - len(Zip1)) + CAST(Zip1 as VARCHAR(10)),
replicate('0', 5 - len(Zip2)) + CAST(Zip2 as VARCHAR(10)),
Distance
from OldZipTable
答案 2 :(得分:0)
用于SQL Server ....
试试这个,假设新列的nvarchar(20):
INSERT INTO NewTable
(col1, col2, col3
,NewZip)
SELECT
col1, col2, col3
,RIGHT(REPLICATE(N'0',20)+CONVERT(nvarchar(20),oldZip),20) --null will result in null
FROM OldTable
答案 3 :(得分:0)
不要在循环中执行这些操作,通常可以使用具有更好性能的纯SQL来完成它们。
此外,始终将
使用Oracle的示例:
Insert Into new_table (zip1, zip2, distance)
Select
TO_CHAR( zip1, 'FM00000' ),
TO_CHAR( zip2, 'FM00000' ),
distance
From old_table
答案 4 :(得分:0)
在MySQL中你可以这样做:
INSERT INTO newTable (zip1, zip2, distance)
SELECT LPAD(zip1, 5, '0'), LPAD(zip2, 5, '0'), distance
FROM oldTable;