sql-server - 仅执行 ELSE 语句的情况
问题描述
我以前从未见过这种情况,但是当我在 SQL Server 中执行语句时,它会执行该SELECT
语句。这怎么可能?是因为它不能在同一列中处理不同类型的值类型吗?CASE WHEN
ELSE
SELECT CASE WHEN len(birthDate)=4 THEN birthDate
WHEN birthDate = '' THEN ''
ELSE CONVERT(datetime, birthDate)
END AS [birthDateConverted]
,[birthDate]
FROM BirthDayTable
结果如下所示:
birthDateConverted birthDate
1951-01-01 00:00:00.000 1951
1936-06-19 00:00:00.000 June 19, 1936
1948-03-11 00:00:00.000 March 11, 1948
NULL
我想要以下内容:
birthDateConverted birthDate
1951 1951
1936-06-19 June 19, 1936
1948-03-11 March 11, 1948
NULL
而且我也不明白为什么当我指定''时我得到NULL。但这部分不如第一部分重要,因为我希望只有指定年份的年份。
解决方案
NULL
不等于 '' 所以,你可以这样做:
SELECT (CASE WHEN len(birthDate) = 4
THEN birthDate
WHEN birthDate IS NULL
THEN ''
ELSE CONVERT(datetime, birthDate)
END) AS [birthDateConverted],
[birthDate]
FROM BirthDayTable;
但是,''
将隐式转换为日期时间。
推荐阅读
- crystal-reports - 如何编辑水晶报表“显示 SQL 查询”?
- php - Laravel 函数无法访问 AJAX 数据
- python - 是否可以将内置表中的静态 Python 模块用作 Python 包的子模块?
- c# - 使用 LINQ 在 2 个列表之间选择匹配结果
- arrays - Lua - 由向量索引的数组
- javascript - 故意在 Javascript 中创建新错误以检查代码行为
- javascript - 如何使用 JavaScript 将用户输入时间数据(分钟和秒)附加到数组中?
- simulink - 如何将模拟速度慢到秒级实时通过?
- ios - 创建具有不同起点和终点的多个渐变视图的最佳方法是什么
- mysql - 我无法连接新版本的 vscode 和新版本的 mysql