代码之家  ›  专栏  ›  技术社区  ›  DKCroat

当试图将列数据类型NVARCHAR转换为INT时,获取错误

sql
  •  0
  • DKCroat  · 技术社区  · 5 年前

    尝试将列数据类型NAVCHAR转换为INT接收错误时。简单代码如下:

    SELECT [phone], FORMAT(CAST(PHONE AS int),'(000)-000-0000)')
    FROM Sales.Customers
    
    2 回复  |  直到 5 年前
        1
  •  3
  •   JC Borlagdan    5 年前

    您的查询应该如下所示:

    SELECT [phone], FORMAT(CAST(REPLACE([phone],'-','')AS INT), '(000)-000-0000)')
    FROM Sales.Customers
    

    因此,如果有一个无效字符要在中转换(对于这个场景,破折号是要替换的字符),它将用空白替换它,然后用您想要的格式格式化它。

    这将变成(030)-345-6789

        2
  •  0
  •   SQLRaptor    5 年前

    似乎有一行电话号码存储为字符串,无法将其转换为int。若要确定是哪一行,请执行:

    SELECT *
    FROM   Sales.Customers
    WHERE  ISNUMERIC(phone) = 0;
    

    高温高压

        3
  •  0
  •   Gordon Linoff    5 年前

    我建议你用 TRY_CAST()

    SELECT [phone],
           FORMAT(TRY_CAST(PHONE AS int), '(000)-000-0000)')
    FROM Sales.Customers;
    

    这又回来了 NULL 如果无法转换值——这比得到错误要好。