我在加载大量的表到SQL Server,并从它们转换的过程中varchar,以特定的数据类型(int,date,等).令人沮丧的是,有多少种不同的方法可以打破从字符串到数字(int,decimal等)的转换,并且没有一种简单的诊断工具来查找有问题的行(除此之外ISNUMERIC()不能一直工作).
这是我打破转换的方法列表,不会被抓住ISNUMERIC().
这是我目前正在使用的补偿:
SELECT
CASE
WHEN [MyColumn] IN ('','-') THEN NULL -- deals with blanks
WHEN [MyColumn] LIKE '%E%' THEN CONVERT(DECIMAL(20, 4), CONVERT(FLOAT(53), [MyColumn])) -- deals with scientific notation
ELSE CAST(REPLACE(REPLACE([MyColumn] , '$', ''), '-', '') AS DECIMAL(20, 4))
END [MyColumn] -- deals with special characters
FROM
MyTable
Run Code Online (Sandbox Code Playgroud)
有没有其他人有其他人?还是好的诊断方法?
不要使用ISNUMERIC().如果您在2012年以上,那么您可以使用TRY_CAST或TRY_CONVERT.
如果您使用的是旧版本,则可以使用以下语法:
SELECT *
FROM #TableA
WHERE ColA NOT LIKE '%[^0-9]%'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
64 次 |
| 最近记录: |