转换SQL Server null日期/时间字段

时间:2009-07-29 16:39:34

标签: sql sql-server

每当此查询的值为null时

SELECT ISNULL(someDateTime,'')
FROM  someTable

结果是

someDateTime  
------------
1900-01-01 00:00:00.000

我希望它是“不”,所以如果我运行它:

SELECT ISNULL(someDateTime,'No')
FROM  someTable

然后出现了这个错误:

  

从字符串转换日期时转换失败。

怎么做?提前谢谢!

5 个答案:

答案 0 :(得分:6)

表达式的结果必须是单一类型。如果你想要一个字符串(并且你这样做,因为'No'不是DateTime),你需要将datetime转换为这样的字符串:

SELECT ISNULL(cast(someDatetime as varchar(20)), 'No') FROM someTable

正如其他人所建议的那样,这样的代码闻起来很糟糕,您可能希望将null传递给客户端组件并在那里进行转换。

答案 1 :(得分:3)

isnull()正在尝试将第二个参数转换为您在第一个参数中指定的字段的数据类型。

如果您要返回一个字符串,则需要将DateTime字段强制转换为字符串类型,以便isnull()能够正常工作 - 请参阅Michael Petrotta's答案以获取完成的方法此

答案 2 :(得分:0)

您仍在选择DateTime列,因此该表达式的结果仍然需要是DateTime值而不是字符串。为了建议适当的解决方法,我们需要更多地了解您真正想要对这些数据做些什么。

答案 3 :(得分:0)

你不能直接这样。在客户端中捕获NULL并将其更改为“no”更容易。

但是,您可以使用令牌值,例如“17530101”这是一个有效的日期时间,或者首先将CONDERT SomeDateTime转换为varchar。

否则,我们需要更多关于为什么等的信息

答案 4 :(得分:0)

在更新存储过程中:将以前的日期值更新为新的空值:

.Parameters.AddWithValue("@Date_Value", Nothing).IsNullable = True