选择中的SQL内联条件

时间:2009-09-23 15:22:12

标签: sql sql-server

我想知道这样的事情是否可行:

SELECT name or alt_name FROM users Where userid=somenum

我也试过这个:

SELECT name IF NOT NULL ELSE alt_name ...

如果有人有任何见解我会很感激。

6 个答案:

答案 0 :(得分:7)

如果您尝试替换空值,那么

select coalesce(name,alt_name)....

它将返回第一个非空值

答案 1 :(得分:2)

这个怎么样?

SELECT IsNull(name, alt_name) FROM users Where userid=somenum

它类似于Coalesce函数,但它只需要两个参数并且更容易拼写。

答案 2 :(得分:1)

你是说这样的意思吗?我假设是TSQL

SELECT CASE WHEN [name] IS NOT NULL THEN [name] ELSE [alt_name] END AS [UserName]
FROM [Users] WHERE [UserId] = somenum

答案 3 :(得分:0)

不是最有效的答案,但是这个:

SELECT name FROM users WHERE userid=somenum AND name IS NOT NULL
UNION
SELECT altname FROM users WHERE userid=somenum AND name IS NULL

我认为这会产生你想要的东西。

答案 4 :(得分:0)

如果您正在使用支持它们的数据库,那么最简单的方法之一就是使用用户定义的函数,然后您就拥有了

SELECT udfPreferredName() FROM users

其中udfPreferredName()将封装在name和alternative_name字段之间进行选择所需的逻辑。

使用函数的一个优点是,您可以抽象出选择逻辑,并将其应用于您需要的任何地方的多个SQL语句中。使用案例进行内联逻辑很好,但在整个系统中维护通常会非常困难。在大多数RDBMS中,除非处理非常大的表

,否则函数调用的额外开销不会很大

答案 5 :(得分:0)

选择案例          当userid = somenum那么名字          ELSE alt_name        结束   来自用户