SQL server简单查询

时间:2010-10-31 21:36:57

标签: sql sql-server sql-server-2005 tsql

如果值不为空,如何从表中选择值,如果不是,则选择默认值?.I.E:

select coalesce(username,'its null') from tb_user where int_id_user = 0

我尝试运行此查询但它不起作用,我希望得到'它为空',因为int_id_user为0,但它返回NULL。

6 个答案:

答案 0 :(得分:1)

select isnull(column, 'default value')
from table

link text

答案 1 :(得分:1)

您可能会考虑在客户端代码中对SQL执行此特定的“IS NULL”检查,因为它对我来说似乎有点笨拙......但它确实有效。

这是您想要的吗?

如果用户名为null,则以下SQL显示返回“null”的方法 OR 如果int_id_user不存在行。

CREATE TABLE #tb_user (
  int_id_user INT NOT NULL PRIMARY KEY,
  username varchar(20) NULL
)
GO

/* returns NO ROWS because #tb_user contains no rows */
select coalesce(username,'its null') from #tb_user where int_id_user = 0
GO

/* returns 'its null' if username IS NULL or int_id_user does not exist in the table */
SELECT COALESCE(
    (select username from #tb_user where int_id_user = 0),
    'its null'
) AS username
GO

答案 2 :(得分:1)

SELECT  COALESCE(username, 'its null'), COALESCE(user_last_name, 'its also null')
FROM    (
        SELECT  0 AS param
        ) q
LEFT JOIN
        tb_user
ON      int_id_user = param

或者,如果您只想要一个字段,

SELECT  COALESCE
        (
        (
        SELECT  username
        FROM    tb_user
        WHERE   int_id_user = 0
        ),
        'its null'
        )

答案 3 :(得分:0)

Telos说得对。 Coalesce的工作方式类似于N列的isnull。

COALESCE(column1, column2, 'default value')

如果您在使用默认值之前尝试了多个列,那么您是否想要使用它。

您当前的查询将返回1,因为1永远不会为空。

答案 4 :(得分:0)

如果您正在使用SQL Server(我不会代表其他dbs),那么无论如何都不会返回您想要的结果。

语法为:

coalesce(expr1, [expr n,] expr2)

在你的情况下,你是说“如果int值1为null,则返回文本'not null'”。但是1的值永远不能为空,所以你永远不会得到所需的文本。

答案 5 :(得分:0)

不,如果没有返回行,这将不起作用 - 如果行中有空值,则isnull和coalesce将起作用,但应该有一行开头。如果没有行,则不返回任何内容。

如果您正在使用存储过程,最好检查查询返回的rowcount,并在它为零时添加一些默认值。

同样,isnull / coalesce必须在某个列而不是整数1上。