【发布时间】:2016-02-09 00:58:19
【问题描述】:
MS SQL Server 中是否有用于调用 CASE WHEN bit THEN 'something' ELSE null END 的快捷方式?有没有办法改写?
示例场景:
DECLARE @data TABLE(IsSomething BIT NOT NULL, Value NVARCHAR(30) NOT NULL);
INSERT INTO @data VALUES
(1, 'a'),
(1, 'b'),
(0, 'c'),
(0, 'd');
SELECT
CASE WHEN IsSomething = 1 THEN Value ELSE NULL END,
CASE WHEN IsSomething = 1 THEN 'string' ELSE NULL END,
CASE WHEN IsSomething = 0 THEN 'not ' + Value ELSE NULL END
FROM @data
我特别在寻找 BIT 值为 1(真)的变体。
关注的是 select 语句的可读性和为简单的 case/if 编写的过长的表达式。
我在最困扰我的观点之一中使用了这些表达方式。我并不是说该视图或表格的设计是理想的。 (其实并不理想!)
【问题讨论】:
-
我真的不明白你想要做什么
-
请添加您想要的输出
-
SQL Server 2012(及更高版本)具有inline if。用法:IIF(布尔表达式,'真输出','假输出')。 @SeanLange 提出了一个很好的观点,如果你不将位限制为非空值,你可能会在这里绊倒。
-
嗯
ELSE NULL可以删除,这是暗示的。越短并不总是越好。 -
@SeanLange 请注意,(ANSI) SQL 布尔值也有三个值——真、假和未知。不过还是不是
bit:)
标签: sql-server