哪位大神能将以下支持oracle的decode函数转换为sqlserver的case when、、then、、else、、end语法

村野樵夫 2013-03-20 04:03:27
select
decode(a.alarmtype,100,'硬盘变更事件',2000,'杀毒软件事件',2002,'设备监控事件',2003,'硬件监视事件',2004,'软件监视事件',2005,'主机防火墙事件',
2006,'HTTP访问事件',2007,'外联监控事件',2008,'网络配置监控事件',2009,'流量控制事件',2010,'系统性能事件',2011,'拨号监控事件',
2012,'文件监视事件',2013,'补丁自动下发事件',2014,'打印监控事件',2015,'进程监视事件',2016,'端口监视事件',
2017,'共享监视事件',2018,'USB监视事件',2020,'流量统计事件',2022,'文档检查事件',2023,'网络准入事件','未知事件') as LABEL,
count(a.alarmtype) as VALUE
from td_eventinfo a
where substr(a.groupurl,instr(a.groupurl, '/', -1, 1) + 1) = 'td'
and a.creationtime BETWEEN to_date('20130304','yyyyMMdd') AND to_date('20130326','yyyyMMdd')
group by a.alarmtype
order by count(a.alarmtype) desc
...全文
212 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
村野樵夫 2013-03-21
  • 打赏
  • 举报
回复
引用 6 楼 sunny8675 的回复:
你告诉我那几个是什么函数,然后我告诉你sql里面是什么,或者你百度都可以搜到sql函数的用法。
substr(a.groupurl,instr(a.groupurl, '/', -1, 1) + 1)这个是oracle支持的截取字符串语句怎么改成sqlserver支持截取字符串语句。例如a.groupurl='/根部门/子部门/td' 截取后的字符串为'td'
sunny8675 2013-03-21
  • 打赏
  • 举报
回复
你告诉我那几个是什么函数,然后我告诉你sql里面是什么,或者你百度都可以搜到sql函数的用法。
村野樵夫 2013-03-21
  • 打赏
  • 举报
回复
引用 4 楼 sunny8675 的回复:
刚查了下,那个是判断函数,在sql里面可以这么写 SQL code ? 123 SELECT t.name AS 名称,max(cw.createdate) AS 时间,(CASE t.type WHEN '1' THEN '1分局' WHEN '2' THEN '2分局' WHEN '3' THEN '3分局' WHEN '4' THEN '4那句' END) ……
substr()\instr()以及to_date()怎样改写成sqlserver支持得查询语句啊!!!????
sunny8675 2013-03-21
  • 打赏
  • 举报
回复
恩,出来就好,其实只是函数不一样,具体用法都大同小异,知道了这个语言的实现,搜索对应的效果就可以完成。
村野樵夫 2013-03-21
  • 打赏
  • 举报
回复
哈哈哈、、、终于查出来啦!在此贴出结果以备其他人需要。 针对oracle中得decode判断函数对应于sqlserver中得case when then else emd、、 oracle中截取字符串substr对应与sqlserver中的substring(注意sqlserver中substring要有三个参数不能省略) oracle中检索指定字符串用instr()对应于sqlserver中charindex() 因为oracle中得检索指定字符串instr支持从右往左开始检索,而sqlserver中charindex不支持,所以还需要结合reverse是把字符串倒置。大体的思路就是这样啦!希望有跟我一样遇到这样问题的朋友有所帮助吧! 贴上代码: !
reverse(substring(reverse(Path),1,charindex('/',reverse(Path)) - 1)) 
) ps:至于sqlserver中case when then else end的用法代码实例可以参照4楼代码(感谢4楼热心帮助
sunny8675 2013-03-20
  • 打赏
  • 举报
回复
刚查了下,那个是判断函数,在sql里面可以这么写

SELECT  t.name AS 名称,max(cw.createdate) AS 时间,(CASE t.type WHEN '1' THEN '1分局' WHEN '2' THEN '2分局' WHEN '3' THEN '3分局' WHEN '4' THEN '4那句' END) AS 分局名称
FROM dbo.users ...
sunny8675 2013-03-20
  • 打赏
  • 举报
回复
关键是我没用过oracle,也不会,我都不知道decode是干嘛用的。
村野樵夫 2013-03-20
  • 打赏
  • 举报
回复
引用 1 楼 sunny8675 的回复:
不是oracle,你可以把业务告诉我,我给你用sqlserver写。
就是把上面得sql语句改成支持sqlserver数据库的语句就行啦!现在急用,希望写出来得sql语句能在sqlserver中执行没有错误
sunny8675 2013-03-20
  • 打赏
  • 举报
回复
不是oracle,你可以把业务告诉我,我给你用sqlserver写。

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧