sql - 寻找凌乱的 SQL ISNULL/NULLIF 的替代方案

标签 sql sql-server sql-server-2012

我有一个在 SQL Server 2012 上运行的 SQL 查询,它需要比较一个位值,如果该值为 1,则返回一个字符串,如果该值为 0,则返回一个空字符串。

最初我将它作为这样的 CASE 语句:

CASE WHEN myBit = 0 THEN 
 -- do other comparisons etc to build up the return string.
 +'myString' 
ELSE 
-- do other comparisons etc to build up the return string.
'' END

问题是“做其他”部分中的所有代码都是相同的。如果位为零,我想要做的就是将一个字符串附加到返回值,如果它是 1,则什么都没有。

所以我将它重构为只有一次公共(public)代码,然后像这样在末尾附加到字符串:

-- do other comparisons etc to build up the return string. +
ISNULL(NULLIF(Cast(ISNULL(CAST(NULLIF(myBit, 0) AS NVARCHAR), 'myString') AS varchar),'0'),'')

但是,由于需要 CAST 语句,上述内容看起来非常困惑。

我正在寻找一种干净整洁的方法来做到这一点,但已经没有想法了 - 有人有更好的方法来实现这一点吗?谢谢。

最佳答案

只需内联添加您的 CASE 语句。当mybit=1时别忘了返回一个空字符串,否则整个返回NULL。

Select 
-- do other comparisons etc to build up the return string.
 + Case When @mybit=0 Then mystring else '' End

关于sql - 寻找凌乱的 SQL ISNULL/NULLIF 的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14778036/

相关文章:

sql - 查找没有数据的表

sql - 为 PostGIS 编写原始 SQL

c# - SQL c# 确定 sql server 的类型

sql - 无法启动服务器上的服务 MSSQLSERVER (mscorlib)

sql - 从左外连接获取不同的行

mysql - JOIN 中的复杂条件

sql - 在数据库中存储时间值并获取两个时间字段之间的差异

sql - 有效查看带有最新修订标记的记录

tsql - 如何使用批量插入 csv 到日期时间格式正确的 sql server?

sql - 基于条件使用 Case When 选择列 - SQL Server