我在T-SQL中自学,所以我确信我可以在代码编写中获得效率,因此即使与此特定问题无关,也欢迎任何指针。
我在写作的夜间例行中遇到了问题。创建初始数据的数据库程序是我无法控制的,并且写得很松散,所以我的数据很糟糕,可能会不时地破坏我的脚本。我正在寻找帮助将错误检查添加到我的脚本中,所以我丢失了一条记录,而不是整个事情的爆炸。
代码如下所示:
SELECT convert(bigint,(SUBSTRING(pin, 1, 2)+ SUBSTRING(pin, 3, 4)+ SUBSTRING(pin, 7, 5) + SUBSTRING(pin, 13, 3))) AS PARCEL, taxyear, subdivisn, township, propclass, paddress1, paddress2, pcity
INTO [ASSESS].[dbo].[vpams_temp]
FROM [ASSESS].[dbo].[Property]
WHERE parcelstat='F'
GO
问题出现在连接发生的第一部分。我试图将此字符串(11-1111-11111.000)转换为此数字(11111111111000)。如果他们正确地输入了他们的数据,那么正确的点和正确位置的数字就会有标点符号。如果他们犯了错误,那么我最终会在错误的位置使用标点符号,并创建一个无法转换为数字的字符串。
答案 0 :(得分:2)
如何简单地更换" - "和"。"用""在CONVERT
到BIGINT
之前?
为此,您只需用
替换部分代码即可SELECT CONVERT(BIGINT,REPLACE(REPLACE(pin,"-",""), ".","")) AS PARCEL, ...
希望它有所帮助。
答案 1 :(得分:1)
首先,我会使用replace()
(两次)。其次,我会使用try_convert()
:
SELECT try_convert(bigint,
replace(replace(pin, '-', ''), '.', '')
) as PARCEL,
taxyear, subdivisn, township, propclass, paddress1, paddress2, pcity
INTO [ASSESS].[dbo].[vpams_temp]
FROM [ASSESS].[dbo].[Property]
WHERE parcelstat = 'F' ;
您可能想要检查值中是否还有其他字符:
select pin
from [ASSESS].[dbo].[Property]
where pin like '%[^-0-9.]%';
答案 2 :(得分:0)
为什么不呢:
select cast(replace(replace('11-1111-11111.000','-',''),'.','') as bigint)
答案 3 :(得分:0)
简单地说,使用下一个代码: -
declare @var varchar(100)
set @var = '11-1111-11111.000'
select convert(bigint, replace(replace(@var,'-',''),'.',''))
<强>结果: - 强>
11111111111000