返回空字符串,日期时间不匹配

狗仔队

表[docSVdate]
PK sID,fielID
值DateTime不为null

如果没有给定PK(sID,fieldID)的行,我需要返回一个空字符串。
这是我能想到的最好的
方法。

  select isnull(convert(varchar,[docSVdate].[value]), '')
    from [docSVsys] as [pholder] with (nolock) 
    left join [docSVdate] 
      on [docSVdate].[sID] = [pholder].[sID]
     and [docSVdate].[fieldID] = 117
   where [pholder].[sID] = 6485
马特·约翰逊·品特

如果转换datetimevarchar在SQL中,您将引入您的SQL Server的语言和文化设置成日期字符串。您可能还会失去精度,具体取决于所使用的格式。如果应用程序代码对字符串的解析与SQL生成的字符串不同,则可能会出错。

因此,简单的答案是-不要这样做。只需将其作为返回即可datetime让调用应用程序直接使用它而不转换为字符串。如有必要,请在调用应用程序中检查是否为null。

如果您确实想这样做,那么可以使用许多技巧,包括您显示的联接以及Luis在其答案中显示的变量。这是另一种使用嵌套查询的技术。也许这就是您要寻找的:

SELECT ISNULL(
    (select convert(varchar, [value])
     from [docSVDate]
     where [sID] = 6485 and [fieldID] = 117
    ), '') as [value]

请注意,无论您是否喜欢,datetime到的转换varchar涉及格式化。如果您未指定任何内容,则将获得所运行系统的默认值。对我来说,在具有美式英语设置的数据库上运行,我的默认格式如下:"Jul 21 2013 4:41PM"但是,如果我使用不同的语言设置,则可能会得到完全不同的结果。您可能应该传递格式说明符,以指示要查找的格式。请参考MSDN参考中的日期和时间样式备注以进行强制转换/转换。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章