列数据类型的条件

时间:2019-01-08 21:02:00

标签: sql sql-server tsql sql-server-2016

我有一个包含多列和350万行的表。我试图编写一条select语句,在其中可以选择B列的数据类型不属于 Date 数据类型的所有行。简单的例子

Column A     Column B
abc          10/20/2014
cde          abd 04/10/201 e

输出将为

Column A            Column B
cde                abd 04/10/201 e  

请注意B列为nvarchar(255),数据类型为null

2 个答案:

答案 0 :(得分:3)

查看TRY_CONVERT()

select ColumnA
    , ColumnB
from YourTable
where TRY_CONVERT(date, ColumnB) IS NULL

答案 1 :(得分:1)

您可以使用 TRY_CAST() TRY_CONVERT() 并检查NULL

SELECT <Columns Here>
FROM <Table Name Here>
WHERE TRY_CAST(<Column Name Here> AS DATE) IS NULL;

但是,我建议将该列的数据类型更改为正确的数据类型,即DATE / DATETIME,以确保数据仅是日期,并且您不会落伍在这个问题上。将日期存储为字符串确实是个坏习惯,您应该避免,因为这些数据类型是有原因的,所以请明智地使用它们。这是正确的方法。