首页 > 解决方案 > 有没有办法用 SQL Server 检测列数据类型?

问题描述

我知道这些详细信息是关于信息模式的,但我的表包含 varchar(max) 形式的所有列,因为它们是直接从平面文件源写入的。我想根据列中的值检测列类型。我无法控制数据的输入方式,所以这张表是我的来源。

因此,例如,如果 Column1 具有 {1, 2, 100, 'NA', NULL, 'Not available', 'Not provided by vendor'} 等值,我当前的 SQL 语句将此列分类为 varchar。我希望能够动态地为该列分配一个 INT。我们可以放心地假设传入的整数数量将大于列中的其他类型字段。

标签: sqlsql-server

解决方案


如果您的列包含“NA”、“不可用”、“供应商未提供”等数据,则它不能是数字,您必须先清理数据,然后相应地更改数据类型

对于数字数据,您可以使用 ISNUMERIC 函数检查

https://docs.microsoft.com/en-us/sql/t-sql/functions/isnumeric-transact-sql?view=sql-server-2017

对于日期数据,您可以使用 ISDATE 功能检查

https://docs.microsoft.com/en-us/sql/t-sql/functions/isdate-transact-sql?view=sql-server-2017


推荐阅读