我正在尝试转换“客户”表中“电话”列中的电话号码。我已经尝试了以下语法,但仍然收到错误消息 -
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 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)','-',''),'(',''),')',''),' ',''))
因为至少你的一些记录默认不能转换为数字,如图所示030-3456789 您基本上需要替换/消除之间的破折号:
SELECT cast(replace('12-3', '-', '') as int)