【问题标题】:SQL DateTime or stringSQL 日期时间或字符串
【发布时间】:2017-06-30 11:02:32
【问题描述】:

我在 TVF 中有以下行:

CASE WHEN MIN(ISNULL(EersteStart,GETDATE())) = GETDATE() 
then 'InOverleg' 
else  MIN(ISNULL(EersteStart,GETDATE())) end as EersteStartDatum

除了这似乎有点低效之外,它仍然不起作用,因为 它会产生以下错误:

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

我了解错误,但如何调整查询以提供我想要的功能? (当基础查询为每行的所有 EersteStartDatum 字段返回 null 时返回字符串“InOverleg”,或者当存在 EersteStartDatum 不为 NULL 的行时显示 MIN 日期)。

【问题讨论】:

  • 唯一的办法就是将日期作为字符串返回
  • 你使用的是哪个DBMS
  • @a_horse_with_no_nam 我正在使用 SQL 服务器

标签: sql sql-server type-conversion


【解决方案1】:

什么是令人困惑的? case 是一个表达式,需要返回一种类型。 SQL Server 倾向于转换为限制性更强的类型。在这个case 中,更严格的时间是datetime'InOverLeg' 不转换。

您可以将日期转换为字符串:

(CASE WHEN MIN(COALESCE(EersteStart, GETDATE())) = GETDATE() 
      THEN 'InOverleg' 
      ELSE  CONVERT(VARCHAR(10), MIN(COALESCE(EersteStart, GETDATE())), 121) -- or whatever format you like
 END) as EersteStartDatum

【讨论】:

    【解决方案2】:

    对所有返回数据使用CAST(data_to_return AS varchar(my_desired_string_length))(然后是结果,否则为结果)。现在,无论如何您都将返回字符串。

    【讨论】:

      猜你喜欢
      • 2016-04-02
      • 1970-01-01
      • 1970-01-01
      • 2013-04-01
      • 1970-01-01
      • 2019-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多