将数据类型Int转换为Varchar SQL Server 2016

时间:2018-09-21 14:41:26

标签: sql sql-server

我正在使用SQL Server2016。我的日期已经是varchar(50)类型。我希望大小写表达式将列创建为Varchar

但是使用以下语句

Case 
    when task_completed_date is not >= 1 
       Then '1'  
    when SUM(DATEDIFF (DAY, task_started_date, task_completed_date)+1) <= 0 
       Then 'Ongoing'
End

抛出错误:

  

将varchar值“正在进行”转换为数据类型int时转换失败

请帮助!谢谢

2 个答案:

答案 0 :(得分:1)

在T-SQL中,# pytest.ini [pytest] testpaths = src/skg/tests confcutdir = src/skg/tests 表达式的返回类型必须与所有路径和替代方式相同-这不是 您遇到的情况。

当不同的CASE路径的返回类型不同时,SQL Server将尝试将所有返回值转换为通用类型-基于MSDN中记录的data type precedence rules

在这里,WHEN的优先级比INT,因此SQL Server试图将所有返回值转换为VARCHAR-很显然,'进行中”并不能很好地转换为INT ......

因此,您需要或者INT中所有可能的返回值转换为有效的CASE-或采用另一种方法使所有返回值{{1} }:

INT

答案 1 :(得分:0)

我认为您的问题出在其他地方,请共享您的完整上下文,并将日期数据保留为非varchar类型的日期,下面的示例很好用

select case when 1>=2 then '1' else 'Ongoing' end

https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=6d47f4d8333fc1cfc606e8c22f942af9