2014-10-02 25 views
0

无法验证日期格式我有TRANSACTIONS表col与BUSINESS_DATE(varchar 255)。由于Msg 8116

distinct LEN(BUSINESS_DATE) = 6 and 8 
--Sample data for BUSINESS_DATE 
071312 --mmddyy for LEN = 6 
08012012 --mmddyyyy for LEN = 8 

我想在TABLE SUNNY中将这些日期加载为DATE。这是我的CASE声明 -

select CASE WHEN LEN(BUSINESS_DATE) = 6 
       THEN CAST('20' + RIGHT(GRAND.[BUSINESS_DATE],2) + LEFT(GRAND.[BUSINESS_DATE],4) AS DATE) 
       WHEN LEN(BUSINESS_DATE) = 8 
       THEN CAST(RIGHT(GRAND.[BUSINESS_DATE],4) + LEFT(GRAND.[BUSINESS_DATE],4) AS DATE) 
       END            AS TRANS_DT 
    into SUNNY 
    from TRANSACTIONS GRAND 

所有记录都已加载。现在当我尝试执行下面的查询来测试日期格式时,它会抛出错误信息8116.是否有人可以解释这里有什么问题和如何我可以测试它吗?

select top 5 * from 
SUNNY 
where ISDATE(TRANS_DT) = 1 
+1

如果列'SUNNY.TRANS_DT'是日期类型(我认为你的问题说,这是),所有的记录都没有打石膏的错误加载事实证明,您的日期是有效的。 – 2014-10-02 17:50:42

回答

4

ISDATE函数不能使用DATE作为它的参数;该文档指出参数:

是可以转换为 字符串的字符串或表达式。表达式必须少于4,000个字符。 日期和时间数据类型(datetime和smalldatetime除外)不允许作为ISDATE的参数使用 。

因此,无论是将值转换为DATETIME而不是DATE在select语句中,还是将ISDATE的参数强制转换为NVARCHAR。

虽然SELECT ... INTO的结果应该是正确的日期,或者演员失败,并且没有数据将被插入到SUNNY中,但该测试似乎没有必要。

+0

谢谢@ jpw。 – 2014-10-02 18:01:59

0

尝试此代码以插入阳光表中。然后检查 如果GRAND。[BUSINESS_DATE]列是varchar类型,则删除convert函数。

select CASE WHEN LEN(BUSINESS_DATE) = 6 
      THEN CAST('20' + convert(varchar(5),RIGHT(GRAND.[BUSINESS_DATE],2))+'-'+ LEFT(GRAND.[BUSINESS_DATE],2)+'-'+substring(GRAND.[BUSINESS_DATE],3,2)) AS DATE) 
      WHEN LEN(BUSINESS_DATE) = 8 
      THEN CAST(RIGHT(GRAND.[BUSINESS_DATE],4) + RIGHT(GRAND.[BUSINESS_DATE],2))+'-'+ LEFT(GRAND.[BUSINESS_DATE],2)+'-'+substring(GRAND.[BUSINESS_DATE],3,2)) AS DATE) 
      END            AS TRANS_DT 
into SUNNY 
from TRANSACTIONS GRAND 
+0

我没有机会检查语法错误。所以有可能获得语法错误 – 2014-10-02 18:00:11

相关问题