我正在使用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时转换失败
请帮助!谢谢
答案 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