ITPub博客

首页 > > > LEFT、RIGHT、CHARINDEX,SUBSTRING示例应用

LEFT、RIGHT、CHARINDEX,SUBSTRING示例应用

作者:飘絮絮絮丶 时间:2023-03-20 15:34:10 0 删除 编辑
/*
原因是网上挂号的病人,年龄问题,比如五年前是1岁,现在从网上挂号后,年龄还是一岁;
存储过程中有一个计算年龄的函数,但是调取的格式为1Y8M,也就是1岁零八月,
或者9M(9个月)这样;
想办法把年龄分开,如果带Y,只取年龄不取月份,否则支取月份,在加上年龄单位
然后在分别赋值给年龄和年龄单位。
*/
DECLARE 
	@I INT,	
	@K VARCHAR(10),--格式化后的年龄
	@AGE INT,--年龄
	@P VARCHAR(10)--年龄单位Y,M
SET @K='25Y10M'
SELECT @I=CHARINDEX('Y', @K)
IF @I=
	BEGIN
	 SET @AGE=LEFT(@K,LEN(@K)-1)
	 SELECT @AGE 
	 SET @P=RIGHT(@K,1) --SET @P='M'这样更方便(2019-07-10 更新,
--今天发现,不能直接写死,如果遇到这种格式的20Y08M29D 就尴尬了,不能显示带天数格式的日期了。)
	 SELECT @P
	END
ELSE
	BEGIN
	 SET @AGE=LEFT(@K,CHARINDEX('Y',@K)-1)
	 SELECT @AGE
	 SET @P=SUBSTRING(@K,CHARINDEX('Y',@K),1) --SET @P='Y'这样更方便
	 SELECT @P
	END

正好巩固下之前学到,但是老忘记的 right()、left(),substring()、charindex()等截取函数的应用。

具体语法有空再补充。上班写知乎很尴尬...


------------2019-07-23 生产库发现了个bug,查询后发现是年龄的问题,对于8M28D这种,报错。改后如下

DECLARE 
	@I INT,	
	@K VARCHAR(10),--格式化后的年龄
	@AGE INT,--年龄
	@P VARCHAR(10),--年龄单位Y,M
	@I1 INT
SET @K='1D'
SELECT @I=CHARINDEX('Y', @K)
IF @I=
	BEGIN
	SELECT @I1=CHARINDEX('M', @K)
	IF @I1>
	BEGIN
	 SET @AGE=LEFT(@K,CHARINDEX('M',@K)-1)
	 SELECT @AGE 
	 SET @P=SUBSTRING(@K,CHARINDEX('M',@K),1) --SET @P='M'这样更方便(2019-07-10 更新,
--今天发现,不能直接写死,如果遇到这种格式的20Y08M29D 就尴尬了,不能显示带天数格式的日期了。)
	 SELECT @P
	 END
	else
		BEGIN
		 SET @AGE=LEFT(@K,LEN(@K)-1)
		 SELECT @AGE 
		 SET @P=RIGHT(@K,1) --SET @P='M'这样更方便(2019-07-10 更新,
	         --今天发现,不能直接写死,如果遇到这种格式的20Y08M29D 就尴尬了,不能显示带天数格式的日期了。)
		 SELECT @P
		END
	END
ELSE
	BEGIN
	 SET @AGE=LEFT(@K,CHARINDEX('Y',@K)-1)
	 SELECT @AGE
	 SET @P=SUBSTRING(@K,CHARINDEX('Y',@K),1) --SET @P='Y'这样更方便
	 SELECT @P
	END

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69946831/viewspace-3132966/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-09-09

  • 博文量
    2646
  • 访问量
    42234