sqlserver 的类似oracle的decode函数

告别GitHub!手把手教你用Gitblit在Windows 10上搭建私人局域网Git服务器(附SourceTree配置) 本文详细介绍了如何在Windows 10环境下使用Gitblit搭建私有Git服务器,实现局域网内高效代码协作。通过轻量级的Gitblit解决方案,开发者可以享受数据完全自主、离线可用性和局域网高速访问等优势。文章包含从环境准备、安装部署到SourceTree配置的全流程指南,特别适合金融、医疗等敏感行业团队使用。 阅读详情
     原来系统是在oracle上开发的,后来客户一声令下,就转移到sqlserver了。在写存储过程的时候,发现decode方法没有,可以用case when来替代。但是之前项目会议上领导又提出,客户说有可能改为其他数据库(或者oracle或者mysql)。所以就想着写一个oracle的decode方法。
   当然一定要实现多个参数的查找替换。网上 http://soft-app.iteye.com/blog/1360490 有总结几个方法,由于我也是在sqlserver2005,最后也看到他推荐用方法四,所以就采用了其中的方法四,脚本如下:
--拆分字符串方法4:利用sql server2005的OUTER APPLY
-- 测试:select * from dbo.fn_split('1,2,3,4,5',',')   
CREATE FUNCTION [dbo].[fn_split]   
(   
  @str VARCHAR(MAX) ,   
  @split VARCHAR(10)   
)   
RETURNS TABLE  
    AS    
RETURN  
    ( SELECT    B.id   
      FROM      ( SELECT    [value] = CONVERT(XML , '<v>' + REPLACE(@str , @split , '</v><v>')   
                            + '</v>')   
                ) A   
      OUTER APPLY ( SELECT  id = N.v.value('.' , 'varchar(100)')   
                    FROM    A.[value].nodes('/v') N ( v )   
                  ) B   
    )   GO
  有了上面的拆分字符串方法后,就可以将参数组成一个字符串,然后在函数里拆分,相当于传入了多个参数。之前觉得oracle的decode函数的最后一个参数default有点啰嗦,其实如果没有找到的话,我就当成是原来字符串返回,如果我有default值的话,就设置,非要每次都有它不可(因为sql语句里有多个类似decode(table_col1, find,replace, find,replace, table_col1),就会显得很多),这次在做这个sqlserver的decode函数的时候,一定要灵活一点。
  直接贴代码,使用方法就按照测试用例来调用就行:
--sqlserver类似oracle的decode函数
--测试用例一:select dbo.fn_decode('2','NULL,空, 1,一,2,二,没找到') 
--测试用例二:select dbo.fn_decode('23','NULL,空, 1,一,2,二') 
--测试用例三:select dbo.fn_decode('23','NULL,空, 1,一,2,二,没找到') 
--测试用例四:select dbo.fn_decode('null','null,0')
--测试用例五:select dbo.fn_decode(null,'null,0')


CREATE function [dbo].[fn_decode](
	@theSource varchar(100),
	@findReplaceStr varchar(999)
	)
returns varchar(1000)
as          
begin
	if @theSource is null
		set @theSource='null'
	
      declare @hasFind int	--是否找到,0为未找到,1为找到
      declare @theDefault varchar(100)	--未找到的默认值,默认为原字符串
      declare @theTarget	varchar(50)	--找到的目标
      declare @theTargetReplace	varchar(50)--目标被替换的值
      declare @paramCount int		--查找替换字符串的个数
      set @hasFind = 0
      set @theDefault= @theSource
      set @theTarget = ''
      set @theTargetReplace = ''
      set @paramCount = ( select count(0) from dbo.fn_split(@findReplaceStr,',') )

    if @paramCount <2 -- 查找替换的字符串应该大于2个,否则返回原字符串
  	return  @theSource
 
   declare recordCursor cursor for select * from dbo.fn_split(@findReplaceStr,',') 
   open recordCursor 
    
   while @paramCount>=2  -- and @@fetch_status <> -1  	
	 begin
		set @paramCount = @paramCount -2  -- 准备取查找字符串和被替换字符串
		fetch next from recordCursor into @theTarget 
		fetch next from recordCursor into @theTargetReplace 
		
		if @theSource = @theTarget	-- 找到了的话,则返回 
			begin 
				set @hasFind = 1
				break
			end
	  end
	
	if @paramCount = 1 --判断是否剩下最后的默认值,如果是,则返回默认值
		fetch next from recordCursor into @theDefault

   close recordCursor
   deallocate recordCursor 
   
   if @hasFind = 0 
	  return @theDefault
    return @theTargetReplace
end
GO
【漏洞复现】Apache Tomcat远程代码执行漏洞(CVE-2024-56337) CVE-2024-56337是一个存在于Apache Tomcat中的TOCTOU(Time-of-Check Time-of-Use)竞争条件漏洞。此漏洞源于对先前漏洞(CVE-2024-50379)的不完整修复。若默认servlet是可写的(参数readonly设置值为false,该设置为非默认设置)表示不区分大小写文件系统,在负载下并发读取和上传同一文件可以绕过Tomcat的大小写检查。攻击者可以通过构造恶意请求上传含恶意JSP代码的文件,使其触发解析并执行这些文件,从而导致远程代码执行。 阅读详情

相关推荐

从“看不懂Sansen”到亲手搭建:一个Class AB输出级+浮动电压源的保姆级设计复盘

本文详细记录了从理论困惑到实践突破的Class AB输出级与浮动电压源设计全过程。通过电流镜调试、恒定跨导优化及版图匹配等关键步骤,作者实现了高性能运放设计,并分享了从仿真到实测的宝贵经验,为模拟电路初学者提供实用指导。

weixin_33737774的博客 869

oracle中decode函数介绍以及在sqlserver中的实现

  decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下: IF 条件=值1 THEN     RETURN(翻译值1) ELSIF 条件=值2 THEN     RETURN(翻译值2)     ...... ELSIF 条件=值n THEN     RETURN(翻译值n) ELSE     RETURN(缺省值) END IFdecode(...

liu3743120的博客 5342

yolov5深度剖析+源码debug级讲解系列(一) yolov5的架构和源码debug准备

前言 前段时间分析了yolov3的源码,这次想带着小伙伴一起把yolov5完全掌握。博主还是保持着一贯的风格,依旧采用debug级别的源码剖析。目的就是让大家可以通过一个系列的文章就把yolov5的架构、设计理念和每一行源码都弄懂。只要小伙伴可以花时间把这个系列读完,就会对yolov5的理解有所提升。 去年参加了kaggle的小麦检测比赛,yolov5在比赛的中段开始呈现霸榜趋势,超越了efficientdet。虽然最后yolov5因为权限等某些问题被kaggle官方禁用了,但是仍然体现出了其强大的能力。值

人唯优的博客 4万+

SQLSERVER SQL性能优化

1.选择最有效率的表名顺序(只在基于规则的优化器中有效)        SQLSERVER的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表driving table)将被最先处理,在FROM子句中包含多个表的情况下,必须选择记录条数最少的表作为基础表,当SQLSERVER处理多个表时,会运用排序及合并的方式连接它们,     首先,扫描第一个表(FRO

figerDeng的专栏 848

Loupe Browser实战指南:解锁10xGenomics单细胞数据的可视化奥秘

本文提供了Loupe Browser的实战指南,帮助用户无需编程即可探索和可视化10xGenomics单细胞数据。文章详细介绍了从数据导入、界面导航到细胞亚群鉴定、差异基因分析的核心操作流程,并分享了高级技巧与避坑指南,是快速上手这一强大可视化工具的必备参考。

weixin_29313423的博客 206

Label Studio保姆级教程:从零搭建医疗影像标注平台(DICOM格式支持)

本文提供基于Label Studio从零搭建医疗影像标注平台的保姆级教程。针对DICOM格式支持,详细阐述了环境部署、DICOM深度集成与预处理、团队协作权限管理以及质量审核闭环等核心环节,旨在构建一个高效、可落地的医疗AI数据标注解决方案,助力模型落地。

nft7creator的博客 304

sql一些常用的函数--decode,case when ,nvl

condition是一个返回布尔类型的表达式,如果表达式返回true,则整个函数返回相应result的值,如果表达式皆为false,则返回ElSE后result的值,如果省略了ELSE子句,则返回NULL。LPAD(decode(count(记录编号),0,1,max(to_number(记录编号)+1)),14,‘0’) 记录编号 from。decode(条件,值1,返回值1,值2,返回值2,…select decode(性别,男,1,0),decode(性别,女,1,0) from 表。

weixin_44227650的博客 2776

FPGA实战 —— 基于UART的多设备串口通信系统设计

本文深入探讨了基于FPGA的多设备UART串口通信系统设计。针对工业控制与物联网应用中一对多通信的需求,文章对比了共享总线式、多路独立式等硬件连接方案,并详细阐述了可配置UART IP核、波特率自适应算法以及多路数据仲裁与分发逻辑等核心设计要点。最后,通过一个四传感器采集节点的实战案例,展示了从硬件连接到Verilog代码实现的完整系统构建过程。

weixin_29172963的博客 234

sql server中类似oracle中decode功能的函数

SQL Server 2008中的写法: select t.PROJECTNAME, t.BUILDCONTENTSCALE, CASE t.PROJECTLEVEL WHEN '0' THEN '国家重点' WHEN '1' THEN '省重点' WHEN '2' THEN '市重点' WHEN '3' THEN '区/县重点'

hu_shengyang的专栏 4万+

CentOS 7下rsyslog日志服务器搭建全攻略:从安装到避坑

本文详细介绍了在CentOS 7系统上搭建rsyslog日志服务器的完整流程,从基础安装到高级配置,包括协议设置、日志模板设计、安全加固和性能优化。特别分享了生产环境中的实战技巧和常见问题解决方案,帮助用户高效构建可靠的日志管理系统。

happy2的博客 687

D触发器(D Flip-Flop)与D锁存器(D Latch)

在解释这个练习题之前,我们先来简单回顾一下D触发器(D flip-flop)和D锁存器(D latch)的概念,以及它们在数字电路中的作用。这将帮助我们理解所提到的练习。

weixin_65190179的博客 9170

SQL中 decode()函数简介

decode()函数简介: 主要作用:将查询结果翻译成其他值(即以其他形式表现出来,以下举例说明); 使用方法: Select decode(columnname,值1,翻译值1,值2,翻译值2,…值n,翻译值n,缺省值) From talbename Where … 其中columnname为要选择的table中所定义的column, ·含义解释: decode(条件,值1,翻译值1,值2,翻译

567

西门子V90 PN伺服控制核心:FB284功能块详解与实战

在工业自动化中,伺服定位控制是运动控制的基础环节,其本质是PLC通过PROFINET协议与伺服驱动器实现高速、确定性数据交互。FB284作为西门子为V90 PN定制的标准化功能块,封装了GSD映射、状态机管理与周期性PDO同步机制,将底层寄存器操作抽象为高可靠调用接口。相比MOVE指令或MC_MoveAbsolute等通用方案,FB284显著降低时序错乱风险,提升多轴同步精度与故障响应能力。它广泛应用于包装、灌装、装配等中端产线,尤其适配S7-1200/1500平台下的快速部署与现场维护。本文聚焦V90 P

weixin_42696271的博客 300

oracle decode sqlserver,sqlserver 的类似oracle的decode函数

原来系统是在oracle上开发的,后来客户一声令下,就转移到sqlserver了。在写存储过程的时候,发现decode方法没有,可以用case when来替代。但是之前项目会议上领导又提出,客户说有可能改为其他数据库(或者oracle或者MysqL)。所以就想着写一个oracle的decode方法。当然一定要实现多个参数的查找替换。网上 http://soft-app.iteye.com/blog...

weixin_33532301的博客 540

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

oracle 类似 sqlserver,sqlserver 的类似oracle的decode函数

原来系统是在oracle上开发的,后来客户一声令下,就转移到sqlserver了。在写存储过程的时候,发现decode方法没有,可以用case when来替代。但是之前项目会议上领导又提出,客户说有可能改为其他数据库(或者oracle或者mysql)。所以就想着写一个oracle的decode方法。当然一定要实现多个参数的查找替换。网上 http://soft-app.iteye.com/blog...

weixin_32161925的博客 369

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

oracle 类似decode,sql server中类似oracle中decode功能的函数

SQL Server 2008中的写法:select t.PROJECTNAME,t.BUILDCONTENTSCALE,CASE t.PROJECTLEVELWHEN '0' THEN '国家重点'WHEN '1' THEN '省重点'WHEN '2' THEN '市重点'WHEN '3' THEN '区/县重点'END AS PROJECTLEVEL,t.TOTALINVESTMENT,t.P...

weixin_39553653的博客 265

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

oracle sql中decode,sql server中类似oracle中decode功能的函数 | 学步园

SQL Server 2008中的写法:select t.PROJECTNAME,t.BUILDCONTENTSCALE,CASE t.PROJECTLEVELWHEN '0' THEN '国家重点'WHEN '1' THEN '省重点'WHEN '2' THEN '市重点'WHEN '3' THEN '区/县重点'END AS PROJECTLEVEL,t.TOTALINVESTMENT,t.P...

weixin_33992214的博客 439

SQL Server数据库和Access数据库的"DECODE"函数问题

作为长期在Oracle下开发的程序员来说,没有DECODE是非常可怕的事情。正巧最近做的自己的小工具的时候,需要在SQL Server和Access实现DECODE函数的功能。查了一下资料,汇总如下: 在SQL Server环境下,使用CASE ... WHEN ... END 进行处理,例子如下:     SELECT 'Price Category' =

大蚂蚁的技术窝 1741

COALESCE函数

类似于 oracle中decode函数的MSSQL函数 ①用途: 将空值替换成其他值 返回第一个非空值 ②表达式: COALESCE是一个函数, (expression_1, expression_2, ...,expression_n)依次参考各参数表达式,遇到非null值即停止并返回该值。如果所有的表达式都是空值,最终将返回一个空值。使用COALESCE在于大部分包含空值的表达...

weixin_30562507的博客 108

oracle 类似decode,类似于ORACLE decode 的用法

SQL Server 2008中的写法:select t.PROJECTNAME,t.BUILDCONTENTSCALE, CASE t.PROJECTLEVEL WHEN '0' THEN '国家重点' WHEN '1' THEN '省重点' WHEN '2' THEN '市重点' WHEN '3' THEN '区/县重点' END AS P...

weixin_39673303的博客 316

decode函数用法

3、decode只能用做相等判断,但是可以配合sign函数进行大于,小于,等于的判断,case when可用于=,>=,

yuandingsanshi的博客 6038

Oracle # 字符串匹配函数(Oracle、SQLSERVER、Excel)

引言: 当数据库设置字段的时候,会设置1表XXX;0表示XXX。查询的时候怎么显示汉字呢? Oracle数据库: 普通查询数据: select * from U_ORANGEZATION 匹配查询数据: select ORG_ID,ORG_NAME,PARENT_ORD_ID,CREATE_TIME,CREATE_USERCODE, CREATE_USERANME,MOFDI...

qq_16313575的博客 1215

跨越Oracle和MSSQL关系数据库开发——01开关语句

1. 概述作为本系列的第一篇文章,我想从一个简单的专题开始。技术的文章通常都比较枯燥乏味,我尽量写的通俗易懂,并使用一些有趣的例子。类似于高级语言,Oracle和MSSQL都提供了开关语句来处理多分枝逻辑。本文将讲述两种数据库开关语句的相同和不同之处,并介绍一些使用经验。 2. 使用条件语句表达多重选择2.1 PL/SQL的条件语句   在PL/SQL中,可以使用I

seafer的专栏 2177
上一篇: 编程词汇
下一篇: 一次替换多个字符串,批量替换多个字符串
wangjunkg
博客等级 码龄20年 12粉丝 8原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值