【发布时间】:2020-09-26 19:39:45
【问题描述】:
我有一张表,它有三列,school_name、school_number、total_Enrollments。但是,total_Enrollments 被加载为 VARCHAR 列数据类型。因此,该列有额外的空格和字符。
场景:A 学校有 621 名招生,但该字段加载了一个额外的空格到 631_,下划线代表空白字段,当我尝试总结时,它不会因为它是 VARCHAR 所以我将其转换为INT 为了总结它(披露:我不是以这种方式设计此表的人,该字段从一开始就应该是数字或 INT)但它失败了。
解决方案:我无法重建此表,有没有办法通过 T-SQL 更改数据类型并删除奇怪的字符和多余的空格,以便我可以使用 SUM 函数来统计列?
【问题讨论】:
-
数字不包含换行符。您需要干净的数据才能更改数据类型。
-
有一个函数 try_cast docs.microsoft.com/en-us/sql/t-sql/functions/… 尝试转换一个 varchar,如果它失败不会返回错误而是返回一个空值。您当然可以修剪 docs.microsoft.com/en-us/sql/t-sql/functions/… try_cast 之前的列,以便首先删除前面或末尾的空格。
-
您的列是应该只包含
int数据,还是也可以包含numeric数据?例如,'1.0'之类的值不能直接转换为int。 -
请注意,
trim有一个可选语法来删除特定集合中的字符,例如declare @WhiteSpace as VarChar(10) = Char( 9 ) + Char( 10 ) + Char( 13 ) + Char( 32 ); ... Trim( @WhiteSpace from MyColumn ) ...删除制表符、换行符、回车符和空格。 -
添加一个新的可为空的 int 列。用
try_cast的结果填充它。然后,您可以选择如何处理失败的值 - 修复或删除。准备好后,删除旧列并将新旧列重命名为旧列名。注意:注意可能依赖于旧列的事情。
标签: tsql