在SELECT语句中,将列值转换为int,否则将其设置为null

时间:2019-08-21 13:03:51

标签: sql sql-server

数据如下:
ver

所有列都是char类型。 我想编写一个将[第3栏]转换为INT的SELECT语句:

SELECT TOP (100) CONVERT(INT,[Column 3])
FROM [AirportFlights].[dbo].[airport-codes_csv]

但是当[Column 3]的内容不可转换时,转换会爆炸。

  

第245级状态1状态1行       将varchar值'Ahus“'转换为数据类型int时,转换失败。

2 个答案:

答案 0 :(得分:6)

这很简单:

SELECT TOP (100) TRY_CONVERT(INT,[Column 3])
FROM [AirportFlights].[dbo].[airport-codes_csv]

我提供的其他提示:

  • 根据Zohar的评论,如果您要提出任何要求,则应始终按顺序订购
  • 使用带有空格的列名要求将它们始终包裹在[]中-我通常避免使用带有空格的列名,以免它在SQL脚本中显得混乱,并避免被ORM替换为其他字符,这会破坏客户端的命名约定边码
  • 考虑始终对表使用别名,尽管当您真正只使用一个表但不进行联接时,这样做的原因并不那么重要

答案 1 :(得分:2)

尝试可能会有所帮助

 select top (100) convert(int, case when [Column3] like '%[^0-9]%' then null else [Column3]  end)as [Column 3]
from [AirportFlights].[dbo].[airport-codes_csv]