sql - 将数据类型 Int 转换为 Varchar SQL Server 2016
问题描述
我正在使用 SQL Server 2016。我的日期已经是类型varchar(50)
。我希望 case 表达式将列创建为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 时转换失败
请帮忙!谢谢
解决方案
T-SQL中表达式的返回类型对于所有路径和备选方案都CASE
必须相同-您的情况并非如此。
当不同WHEN
路径的返回类型不相同时,SQL Server 将尝试将所有返回值转换为通用类型——基于MSDN 中记录的数据类型优先规则。
在这里,INT
具有比更高的优先级VARCHAR
,因此 SQL Server 正在尝试将所有返回值转换为INT
- 很明显,'Ongoing' 并不能很好地转换为INT
......
因此,您需要将所有可能的返回值从您的返回值转换CASE
为有效INT
- 或另辟蹊径,使所有返回值VARCHAR
:
Case
when task_completed_date is not >= 1
Then CAST('1' AS VARCHAR(5))
when SUM(DATEDIFF (DAY, task_started_date, task_completed_date)+1) <= 0
Then 'Ongoing'
End
推荐阅读
- python - 使用 pandas 读取 csv 数据中的某些列
- python - 网页抓取 pdf 链接 - 不返回结果
- reactjs - 测试异步反应钩子时我应该在哪里使用act?
- iccube - icCube Reporting - 使用事件的标签:格式和语法
- http - 使用应用程序权限更新 Azure AD 密码
- database - 是否可以更快地调试查询?
- javascript - 当我访问子元素时,函数在循环后不继续
- c# - 如何在 Selenium(PhantomJs)中获取 Javascript 呈现的 Html?
- c# - 无法在列表中找到最长的字符串匹配
- c++ - C++ 标准是否明确允许/禁止使用不完整类型实例化 std::function?