Tsql 在多个替换和子字符串中将字段强制转换为十进制

Tsql 在多个替换和子字符串中将字段强制转换为十进制,tsql,substring,sql-server-2016,data-conversion,Tsql,Substring,Sql Server 2016,Data Conversion,我正在尝试将客户数据从一个遗留供应商导入到我们的数据库中,而之前的供应商是一个varchar10字段,在该字段中我看到了诸如和之类的字符 我正在尝试导入到我们的表中,该表将电话号码存储在两列中—phone1AreaCode和phone1Number。phone1AreaCode是小数3,0数据类型,phone1Number是小数7,0 我尝试过各种方法将子字符串强制转换或转换为十进制,但总是出错 以下是我在SELECT中可用但在尝试插入时失败的内容: REPLACE(REPLACE(REPLAC

我正在尝试将客户数据从一个遗留供应商导入到我们的数据库中,而之前的供应商是一个varchar10字段,在该字段中我看到了诸如和之类的字符

我正在尝试导入到我们的表中,该表将电话号码存储在两列中—phone1AreaCode和phone1Number。phone1AreaCode是小数3,0数据类型,phone1Number是小数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.
我尝试了不同的演员或转换位置,但它们都给了我相同的错误:

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,

通过谷歌搜索,看起来子字符串可能无法处理十进制数据类型。如果这是真的,我该如何解决这个问题呢?

我可以通过首先将字段转换为INT,然后将其转换为十进制来解决这个问题:

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,