将 nvarchar 转换为 int,将 phone 转换为仅包含数字的符号

Converting nvarchar to int, converting phone with symbols with only numbers

我正在尝试从 table 'Clients' 中转换 'phone' 列中的 phone 数字。我尝试了以下语法,但仍然收到错误消息 -

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

查询没有return错误但没有结果,该列为空。

因为至少你的一些记录不能默认转换为数字,如指示的那样030-3456789 您基本上需要 replace/eliminate 中间的破折号:

SELECT cast(replace('12-3', '-', '') as int)

无论如何,欢迎来到 Whosebug。

看起来(从您的示例语法来看)您可能正在使用 SQL 服务器。

如果是这样,并且是 2017 年以后,您可以执行以下操作来处理 non-numeric 值的任意组合。

根据您的意见,以下应该有效

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

Result: 57890123

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

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