嗨,我对sql server有一个疑问。
当sql server表中的列数据类型I是numeric时,获取0或Table值,否则为max(id):empid
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
基于以上数据,我希望输出如下所示
id
6
我像下面这样尝试过
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中编写查询来完成此任务。
发布于 2019-07-23 16:10:29
您应该使用COALESCE函数,该函数使您能够将潜在的NULL替换为您希望的任何值(在当前情况下为0),如下所示:
select coalesce(id, 0) as id from [dbo].[empid];
发布于 2019-07-23 16:13:21
为什么使用''
?只需使用0
即可
SELECT ISNULL(id,0) AS test
FROM dbo.empid;
ISNULL
返回第一个参数的数据类型,因此使用您已有的SQL,您隐式地尝试将''
转换为numeric
,但这是失败的。
发布于 2019-07-23 16:26:50
更好的方法是使用SQL提供的COALESCE函数
COALESCE(arg1, arg2[, argN])
它的作用是接受N个参数
的值
查询可以是
SELECT COALESCE(Id, 0) as Id FROM [dbo].[empid]
https://stackoverflow.com/questions/57159507
复制相似问题