在多个替换和子字符串中将字段转换为小数
Cast Field as Decimal Inside Multiple Replace's and Substring
我正在尝试将客户数据从旧供应商导入我们的数据库 - 之前的供应商是一个 varchar(10) 字段,我在其中看到了诸如“)”、“(”和“-”之类的字符.
我正在尝试导入我们的 table,它在两列中存储一个 phone 号码 - 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,
我正在尝试将客户数据从旧供应商导入我们的数据库 - 之前的供应商是一个 varchar(10) 字段,我在其中看到了诸如“)”、“(”和“-”之类的字符.
我正在尝试导入我们的 table,它在两列中存储一个 phone 号码 - 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,