将nvarchar转换为int,将电话与符号转换为仅数字

问题描述 投票:0回答:2

我正在尝试转换“客户”表中“电话”列中的电话号码。我已经尝试了以下语法,但仍然收到错误消息 -

1. SELECT CAST(phone as int)
   FROM Clients

错误:将 nvarchar 值“030-3456789”转换为数据类型 int 时转换失败

2. SELECT CONVERT(int, phone)
   FROM Clients

将 nvarchar 值“030-3456789”转换为数据类型 int 时转换失败。

3. SELECT CAST(phone AS BIGINT)
   FROM Clients
   WHERE ISNUMERIC(phone) = 1

查询不返回错误,但没有结果,列为空。

sql sql-server integer nvarchar
2个回答
0
投票

(从您的示例语法来看)您可能正在使用 SQL Server。

如果是这种情况,并且是 2017 年以上,您可以执行以下操作来处理非数字值的任意组合。

根据您的评论,以下内容应该有效

select Try_Convert(bigint, Replace(Translate('(5) 789-0123','()-','   '),' ',''))

结果:57890123

如果您使用的是 SQL Server 2016 或更早版本,则必须嵌套多个替换:

select Try_Convert(bigint, Replace(Replace(Replace(Replace('(5) 789-0123)','-',''),'(',''),')',''),' ',''))

0
投票

因为至少你的一些记录默认不能转换为数字,如图所示030-3456789 您基本上需要替换/消除之间的破折号:

SELECT cast(replace('12-3', '-', '') as int)
© www.soinside.com 2019 - 2024. All rights reserved.