tsql - 在多个替换和子字符串中将字段转换为十进制
问题描述
我正在尝试将客户数据从旧供应商导入到我们的数据库 - 之前的供应商是一个 varchar(10) 字段,我在其中看到了诸如“)”、“(”和“-”之类的字符。
我正在尝试导入我们的表,该表将电话号码存储在两列中 - phone1AreaCode 和 phone1Number。phone1AreaCode 是 decimal(3,0) 数据类型,phone1Number 是 decimal(7,0)。
我尝试了各种将子字符串转换或转换为小数的方法,但我一直遇到错误。
这是我在 SELECT 中工作但在尝试插入时失败的内容:
REPLACE(REPLACE(REPLACE(REPLACE(SUBSTRING(PHONE,1,3),'(',''),')',''),'-',''),' ','') AS phone1AreaCode,
REPLACE(REPLACE(REPLACE(REPLACE(SUBSTRING(PHONE,4,7),'(',''),')',''),'-',''),' ','') AS phone1Number ,
错误:
Error converting data type varchar to numeric.
我尝试了 CAST 或 CONVERT 的各种位置,但它们都给了我同样的错误:
Argument data type decimal is invalid for argument 1 of substring function.
尝试失败:
REPLACE(REPLACE(REPLACE(REPLACE(SUBSTRING(CAST(PHONE AS DECIMAL(3,0)),1,3),'(',''),')',''),'-',''),' ','') AS phone1AreaCode,
从谷歌搜索,看起来可能 SUBSTRING 无法处理十进制数据类型。如果这是真的,我该如何解决这个问题?
解决方案
我能够通过首先将字段转换为 INT 然后将其转换为 DECIMAL 来解决此问题:
CASE
WHEN s.PHONE IS NULL OR s.PHONE = '' THEN NULL
ELSE CONVERT(DECIMAL(3,0),CONVERT(INT,REPLACE(REPLACE(REPLACE(REPLACE(SUBSTRING(PHONE,1,3),'(',''),')',''),'-',''),' ','')))
END AS phone1AreaCode,
CASE
WHEN s.PHONE IS NULL OR s.PHONE = '' THEN NULL
ELSE CONVERT(DECIMAL(7,0),CONVERT(INT,REPLACE(REPLACE(REPLACE(REPLACE(SUBSTRING(PHONE,4,7),'(',''),')',''),'-',''),' ','')))
END AS phone1Number,
推荐阅读
- python-3.x - 将文件从 Colab 上传到 Google Drive 文件夹
- android - ListView 使用凌空
- powershell - 如何使用powershell从字符串中打印奇数字符
- swift - 数据是否写入到写入后返回的 BLE 特征
- web-services - weblogic上的springboot应用程序收到超时异常
- javascript - 角度服务中的EventEmitter,好还是坏?
- kubernetes - 为什么使用尤里卡?
- java - 在下载完成之前显示进度条 - Android
- macros - __impl 在宏模式中的意义是什么?
- javascript - 过滤 2 个数组以在 React/JSX 中呈现一个值