【问题标题】:Error during date/time conversion no date日期/时间转换期间出错 无日期
【发布时间】:2014-10-13 20:53:10
【问题描述】:

最后一个字段STEPCDvarchar(10)

如果我删除 where 语句 smsdss.c_cfvhs_EMSTAT_ORDERS.STEPCD = '10006' 查询运行正常。但是当我添加这个时,我得到了错误:

 Conversion failed when converting date and/or time from character string. 

如果 STEP 代码为 varchar,则此日期/时间错误来自哪里?

Select CP_Population.*, CHRTNO,PRSNTINGCOMPL,DISPOCD,

CONVERT(DATETIME, CAST(smsdss.c_cfvhs_EMSTAT_CHART.ARRVDATE AS datetime)    
+ CAST(smsdss.c_cfvhs_EMSTAT_CHART.ARRVTIME AS time), 120) AS [ED_Arrival_dtime],

CONVERT(DATETIME, CAST(smsdss.c_cfvhs_EMSTAT_CHART.DSCHDATE AS datetime)    
+ CAST(smsdss.c_cfvhs_EMSTAT_CHART.DSCHTIME AS time), 120) AS [ED_Discharge_dtime],

DATEDIFF(MINUTE,CONVERT(DATETIME, CAST(smsdss.c_cfvhs_EMSTAT_CHART.ARRVDATE AS datetime)    
+ CAST(smsdss.c_cfvhs_EMSTAT_CHART.ARRVTIME AS time), 120),
CONVERT(DATETIME, CAST(smsdss.c_cfvhs_EMSTAT_CHART.DSCHDATE AS datetime)    
+ CAST(smsdss.c_cfvhs_EMSTAT_CHART.DSCHTIME AS time), 120)) AS [ED_Arrival to ED_Discharge],

CASE 
WHEN CP_Population.vst_type_cd = 'O' 
THEN DATEDIFF(MINUTE,CONVERT(DATETIME, CAST(smsdss.c_cfvhs_EMSTAT_CHART.DSCHDATE AS datetime)   
+ CAST(smsdss.c_cfvhs_EMSTAT_CHART.DSCHTIME AS time), 120), CP_Population.op_released)*1.0/60  
WHEN CP_Population.vst_type_cd = 'I' 
THEN DATEDIFF(MINUTE,CONVERT(DATETIME, CAST(smsdss.c_cfvhs_EMSTAT_CHART.DSCHDATE AS datetime)   
+ CAST(smsdss.c_cfvhs_EMSTAT_CHART.DSCHTIME AS time), 120), CP_Population.vst_end_dtime)*1.0/60           ELSE NULL END 
As [Unit_LOS],
STEPCD

FROM CP_Population INNER JOIN smsdss.c_cfvhs_EMSTAT_CHART
ON right('00' + smsdss.c_cfvhs_EMSTAT_CHART.VISITNO,12) COLLATE SQL_Latin1_General_Pref_CP1_CI_AS     = CP_Population.pt_id

LEFT OUTER JOIN smsdss.c_cfvhs_EMSTAT_ORDERS ON smsdss.c_cfvhs_EMSTAT_CHART.CHRTNO =     smsdss.c_cfvhs_EMSTAT_ORDERS.CHARTNO
LEFT OUTER JOIN smsdss.c_cfvhs_EMSTAT_DISPO ON smsdss.c_cfvhs_EMSTAT_CHART.DISPOCD =   smsdss.c_cfvhs_EMSTAT_DISPO.CODE

WHERE TYPE = 'A'
AND smsdss.c_cfvhs_EMSTAT_ORDERS.STEPCD = '10006' <--ERROR

【问题讨论】:

  • 看起来它是一个日期时间列,但您传递的日期无效

标签: sql datetime-format


【解决方案1】:

我认为您的 STEPCD 列中有一条坏记录,如果您使用的是 SQL 2012,请尝试使用 TRY_CONVERT 并检查结果以查看哪一行返回 null,这将是您的脏记录。

您可以尝试的其他选项是在查询中添加下面的 where 子句

WHERE TYPE = 'A'
AND smsdss.c_cfvhs_EMSTAT_ORDERS.STEPCD = '10006' 
AND ISDATE(smsdss.c_cfvhs_EMSTAT_ORDERS.STEPCD) = 0

【讨论】:

    猜你喜欢
    • 2014-06-18
    • 1970-01-01
    • 2013-08-29
    • 1970-01-01
    • 2014-07-01
    • 1970-01-01
    • 2013-09-20
    相关资源
    最近更新 更多