首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在sql server中,当列数据类型为数字时,获取0;当列数据类型为when时,获取0;否则,获取max(id)。

在sql server中,当列数据类型为数字时,获取0;当列数据类型为when时,获取0;否则,获取max(id)。
EN

Stack Overflow用户
提问于 2019-07-23 16:06:38
回答 3查看 36关注 0票数 0

嗨,我对sql server有一个疑问。

当sql server表中的列数据类型I是numeric时,获取0或Table值,否则为max(id):empid

代码语言:javascript
运行
复制
CREATE TABLE [dbo].[empid](
    [id] [numeric](11, 0) NULL
) ON [PRIMARY]
GO
INSERT [dbo].[empid] ([id]) VALUES (NULL)
GO
INSERT [dbo].[empid] ([id]) VALUES (CAST(6 AS Numeric(11, 0)))
GO

基于以上数据,我希望输出如下所示

代码语言:javascript
运行
复制
id

6

我像下面这样尝试过

代码语言:javascript
运行
复制
select case when isnull( max(id),'')='' then cast (0  as numeric) else max(id end test from )
    [Test].[dbo].[empid]

但上面的查询得到错误消息8114,级别16,状态5,第9行将数据类型varchar转换为numeric时出错。

假定表中没有记录,则maxid将为0

请告诉我如何在sql server中编写查询来完成此任务。

EN

回答 3

Stack Overflow用户

发布于 2019-07-23 16:10:29

您应该使用COALESCE函数,该函数使您能够将潜在的NULL替换为您希望的任何值(在当前情况下为0),如下所示:

代码语言:javascript
运行
复制
select coalesce(id, 0) as id from [dbo].[empid];
票数 0
EN

Stack Overflow用户

发布于 2019-07-23 16:13:21

为什么使用''?只需使用0即可

代码语言:javascript
运行
复制
SELECT ISNULL(id,0) AS test
FROM dbo.empid;

ISNULL返回第一个参数的数据类型,因此使用您已有的SQL,您隐式地尝试将''转换为numeric,但这是失败的。

票数 0
EN

Stack Overflow用户

发布于 2019-07-23 16:26:50

更好的方法是使用SQL提供的COALESCE函数

代码语言:javascript
运行
复制
COALESCE(arg1, arg2[, argN])

它的作用是接受N个参数

  • arg1是可以为空的列
  • arg2是可以为空的列
  • argN是要将其替换为

的值

查询可以是

代码语言:javascript
运行
复制
 SELECT COALESCE(Id, 0) as Id FROM [dbo].[empid]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57159507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档