尝试将列的日期转换为mmddyyyy,当它是yyyymmdd时,在其他列的表中

时间:2014-04-09 21:19:42

标签: sql sql-server

我在尝试将列的日期转换为标准MMDDYYYY格式时遇到问题。

例如,我有一个包含如下数据的表:

ID   |   Date   |   Type   |
----------------------------
1    | 20140308 | License  |
2    | 20140308 | License  |
3    | 48       | License  |

我想收到的结果是:

ID   |   Date      |   Type   |
-------------------------------
1    | 3-8-2014    | License  |
2    | 3-8-2014    | License  |
3    | 48(not sure)| License  |

当垃圾数据进入系统时,这是否可行?当我尝试将日期转换为MMDDYYYY时,我一直收到这样的错误。

  

消息241,级别16,状态1,行1转换时转换失败   字符串的日期和/或时间。警告:空值是   通过聚合或其他SET操作消除。

1 个答案:

答案 0 :(得分:2)

这个怎么样....

测试数据

DECLARE @Table TABLE(ID INT,[Date] VARCHAR(8),[Type] VARCHAR(20))
INSERT INTO @Table VALUES
(1,'20140308','License'),
(2,'20140307','License'),
(3,'48'      ,'License')

<强>查询

SELECT ID 
      ,CASE WHEN ISDATE([Date]) = 1
                THEN CONVERT(VARCHAR(10), CAST([DATE] AS DATE), 110)
            ELSE NULL END AS [Date]
      ,[Type]
FROM @Table

结果集

╔════╦════════════╦═════════╗
║ ID ║    Date    ║  Type   ║
╠════╬════════════╬═════════╣
║  1 ║ 03-08-2014 ║ License ║
║  2 ║ 03-07-2014 ║ License ║
║  3 ║ NULL       ║ License ║
╚════╩════════════╩═════════╝