有没有一种方法可以使用SQL Server检测列数据类型?

时间:2018-10-08 22:39:55

标签: sql sql-server

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

因此,例如,如果Column1具有类似{1、2、100,'NA',NULL,'不可用','供应商未提供'}的值,则我当前的SQL语句将该列归类为varchar。我希望能够为该列动态分配一个INT。我们可以安全地假设传入的整数数将大于列中其他类型的字段。

2 个答案:

答案 0 :(得分:0)

如果您的列包含“ 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

答案 1 :(得分:0)

没有任何内置于Sql Server的内容。与其他数据库一样,Sql Server希望您对所有内容使用varchar(max)以外的列类型。如果数据是平面文件,请在导入前 检查文件以了解您要导入的文件到底是什么,并将其设置为SSIS作业或其他导入过程的一部分。