Sql 将空字符串转换为datetime

Sql 将空字符串转换为datetime,sql,tsql,sql-server-2012,Sql,Tsql,Sql Server 2012,我在SQL Server数据库中有一个字符串类型的字段。此字段用于不同客户端的不同内容。我们正在该字段中为一个客户存储日期。当字段没有加载任何内容时,它是空的(空字符串)。我需要从这个客户机的字段中提取数据,并在where语句中使用它。我认为将值转换为最新数据类型是一个简单的问题,但是我得到了错误 '从字符串转换日期和/或时间时,转换失败 下面是代码片段:其中boldet.detmisc1>=@begin 我尝试了以下方法: where cast(boldet.detmisc1作为日期)>=@b

我在SQL Server数据库中有一个字符串类型的字段。此字段用于不同客户端的不同内容。我们正在该字段中为一个客户存储日期。当字段没有加载任何内容时,它是空的(空字符串)。我需要从这个客户机的字段中提取数据,并在where语句中使用它。我认为将值转换为最新数据类型是一个简单的问题,但是我得到了错误

'从字符串转换日期和/或时间时,转换失败

下面是代码片段:
其中boldet.detmisc1>=@begin

我尝试了以下方法:

where cast(boldet.detmisc1作为日期)>=@begin

where cast(isnull(nullif(boldet.detmisc1,),'')作为日期)>=@begin

有没有办法将空字符串值转换为空datetime值,以便在where语句中使用它

数据库:SQL Server 2012

如果是其他原因导致错误,我将附加整个查询:

    declare @begin datetime
set @begin = dateadd(dd, datediff(dd, 0, GETDATE()) - 1, 0)
declare @stop datetime
set @stop = dateadd(dd, datediff(dd, 0, GETDATE()), 0)
;
 with a as (select boldet.BOL_Key
 --boldet.DetMisc1

from ProBillTBL pro WITH (NOLOCK)
    INNER JOIN BOLTBL bol WITH (NOLOCK) On Pro.ProBill_Key = Bol.ProBill_Key
    INNER JOIN BOLDetailTBL boldet WITH (NOLOCK) On Bol.BOL_Key = BolDet.BOL_Key
    INNER JOIN ClientLocTBL cliloc WITH (NOLOCK) On Pro.ClientLoc_Key = Cliloc.ClientLoc_Key
    INNER JOIN CarrierTBL car WITH (NOLOCK) On Pro.Carrier_Key = Car.Carrier_Key
    --left outer join support sup (nolock) on pro.probill_key = sup.probill_key     

where cliloc.ClientLoc_Key = 2519
    and boldet.DetMisc3 in ('1', '4', '5')
     and (pro.ProEnteredDate >= @begin)

     or (cast((case when boldet.detmisc1 = '' then NULL else boldet.detmisc1 end) as date) >= @begin))


select * from a
当我注释掉这一节
(cast((case When boldet.detmisc1=''然后NULL else boldet.detmisc1 end)as date)>=@begin)
我得到一个结果,但是在where子句中我得到了错误。

尝试以下方法:

WHERE 
  CAST((CASE WHEN boldet.detmisc1 = '' THEN NULL ELSE boldet.detmisc1 END) 
  As Date) >= @begin
试试这个:

WHERE 
  CAST((CASE WHEN boldet.detmisc1 = '' THEN NULL ELSE boldet.detmisc1 END) 
  As Date) >= @begin

我仍然得到同样的错误。我编辑了我的帖子以包含整个查询。可能不仅仅是空字符串,还有其他无效的日期值。Magnus,我的第一个反应是“不,可能不是。”但是,我确实检查了字段中的两个值,发现它们是无效项。感谢您提示我检查(我应该已经做了)。虽然Magnus提供的上述答案在某些情况下有所帮助,但我在将文本转换为EXCEL时仍然遇到问题。我最终决定使用正则表达式来查找类似“mm/dd/yyyy”的格式。此方法的一个问题是,用户仅限于该格式来输入日期。我提供了有关此方面的培训nd它已经运行了2个月,没有任何问题。我仍然收到相同的错误。我编辑了我的帖子以包含整个查询。可能不仅仅是空字符串,还有其他无效的日期值。Magnus,我的第一反应是‘不,可能不是它。’,我确实检查了一下,发现字段中有两个值是无效的条目。感谢您提醒我检查(我应该已经做了)。尽管Magnus提供的上述答案在某些情况下有所帮助,但我在将文本转换为EXCEL时仍然遇到问题。我最终决定使用正则表达式来寻找类似“mm/dd/yyyy”的格式。这种方法的一个问题是,用户只能使用这种格式输入日期。我已经提供了这方面的培训,它已经运行了2个月,没有进一步的问题。