表[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
如果转换datetime
为varchar
在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] 删除。
我来说两句