2012-10-17 57 views
5

我在SQL Server中有一个数据库。我没有授权更改任何表格,但我可以创建视图。如何将varchar转换为datetime并在TSQL中跳过无效的datetime

我有三个varchar列,其中的格式为YYYYMMDD。我想创建一个日期从varchar转换为datetime的视图。

现在可以是这种情况,而不是在这个列中的日期,我可以有空的空间,NULL或字符-

我们来看看closedDate这一列。如果我使用CONVERT(datetime, closedDate, 112)

  1. 有效日期正确转换,

  2. 当有空白的日期转换为1900-01-01

  3. NULL保持,

  4. -导致转换错误:

The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.

如何告诉函数来转换日期只是如果它有有效的日期形式,并在所有其他情况下保留NULL或更好的空日期(或空格)?

回答

15

试试这个

CASE WHEN ISDATE(closedDate) = 1 THEN CONVERT(datetime, closedDate, 112) 
    ELSE NULL END closedDate 
+0

完美的感谢!如果不是NULL,我想获得空的日期/空间? – CiccioMiami

+0

在日期时间字段中不能有空白空间。 – HLGEM

+0

感谢作品的魅力! –

0
 Use below code  


    SELECT CASE WHEN ISDATE(datecolumn)=1 THEN CONVERT(datetime, datecolumn, 103) 
         ELSE null END 
      FROM tablename 


use below for empty data 

    SELECT CASE WHEN ISDATE(datecolumn)=1 THEN CONVERT(datetime, datecolumn, 103) 
          ELSE '' END 
       FROM tablename 
+0

第二个示例将无法按预期工作。 SQL(TSQL PL/SQL)必须为行输出选择数据类型 - 并且由于该列看起来是日期时间 - 所以所有值必须转换为日期时间。并且在SQL Server上将一个空字符串转换为datetime返回“1900-01-01 00:00:00”(我将在Oracle上打赌)。 – ripvlan

+0

是的,它会返回默认日期1900-01-01 00:00:00.000 – Shridhar