sqlserver 分段截取字符串

原创 2013年12月02日 17:01:41

问题:最近在项目上碰到一个关于清单排序的问题,系统根据清单编号进行排序,而数据库保存的清单编号是字符串类型,当碰到清单编号为207-1,207-10,207-2这种情况时,页面排序顺序就为 207-1,207-10,207-2;正确的顺序应该是 207-1,207-2,207-10。

考虑到表中清单编号有一二三四级不同的结构,所以要对清单的结构进行判断,然后分段截取字符串。

在网上搜了很多都是关于固定结构的字符串截取方式,所以将自己写的条件判断截取贴出来,有待改进之处还请多指教。(第一次发技术贴)

 

select charindex('-',ipqb_code), ipqb_code 
--截取第一层(判断是否存在字符'-'。存在,取字符'-'左边的字符串,不存在,取整个字符串)
,case when charindex('-',ipqb_code) > 0 then left(ipqb_code,CHARINDEX('-',ipqb_code)-1) else ipqb_code end ipqb_code1
--截取第二层(判断是否存在字符'-',存在,将第一个字符'-'及其左边的字符用空字符串替换,再判断替换后的字符串是否包含'-',包含,则取替换后的字符串中字符'-'左边的字符串,否则,反转然后取字符'-'右边的字符串;else取'0')
,case when charindex('-',ipqb_code) > 0 
      then 
	case when charindex('-',stuff(ipqb_code,1,charindex('-',ipqb_code),'')) > 0
	     then left(stuff(ipqb_code,1,charindex('-',ipqb_code),''),charindex('-',stuff(ipqb_code,1,charindex('-',ipqb_code),''))-1)
	     else right(ipqb_code,CHARINDEX('-',reverse(ipqb_code))-1)
	end
      else '0' 
end ipqb_code2
--截取第三层(与第二层逻辑一样,只是多包一层)
,case when charindex('-',ipqb_code) > 0 
      then
	case when charindex('-',stuff(ipqb_code,1,charindex('-',ipqb_code),'')) > 0
	     then
		case when charindex('-',stuff(stuff(ipqb_code,1,charindex('-',ipqb_code),''),1,charindex('-',stuff(ipqb_code,1,charindex('-',ipqb_code),'')),'')) > 0
		     then left(stuff(stuff(ipqb_code,1,charindex('-',ipqb_code),''),1,charindex('-',stuff(ipqb_code,1,charindex('-',ipqb_code),'')),''),charindex('-',stuff(stuff(ipqb_code,1,charindex('-',ipqb_code),''),1,charindex('-',stuff(ipqb_code,1,charindex('-',ipqb_code),'')),'')) - 1)
		     else right(ipqb_code,CHARINDEX('-',reverse(ipqb_code))-1)
		end
	     else '0'
	end
      else '0'
end ipqb_code3
from bill


 

php 读取sqlserver 2008 image类型(二进制)字段被截断问题(mssql.textsize)

项目环境:php5.5 + sql server 2008  sql server 2008 表中有一个字段为image类型,存储了附件文件内容。 目的: 用php将该image类型字段读出并保存成...
  • hanzengyi
  • hanzengyi
  • 2016年08月01日 17:34
  • 2107

SqlServer Text类型字段超过8000字处理

SqlServer的T-Sql 如下: 表结构: 字段名         id      title      content 类型            int      char(20...
  • my98800
  • my98800
  • 2016年05月19日 08:17
  • 743

SQL Server 根据分隔符依次截取每个子字符串

1. ***--根据递归先求得一串序列,再根据序列使用charindex函数截取依次靠近分隔符的字符串,之后通过WHERE条件中判断分隔符位置筛选目标字符串*** DECLARE @str VAR...
  • CatchMe_439
  • CatchMe_439
  • 2017年03月15日 11:43
  • 401

sqlserver字符串拆分(split)方法汇总

declare @s varchar(100),@sql varchar(1000) set @s='1,2,3,4,5,6,7,8,9,10,11'  while(charindex(','...
  • tastelife
  • tastelife
  • 2012年08月28日 09:28
  • 35864

SQL Server中截取字符串常用函数

SQL Server 中截取字符串常用的函数: 1.LEFT ( character_expression , integer_expression ) 函数说明:LEFT ( '源字符串' , '...
  • hu_shengyang
  • hu_shengyang
  • 2013年08月29日 17:01
  • 213800

SQLSERVER中根据字符截取字符串

字段A=’F:\photo\Winter Leaves.jpg’            要求:分段截取每段字符[字段A不能为TEXT类型,否则报错]            解决方法:   ...
  • horizon0503
  • horizon0503
  • 2015年02月05日 16:25
  • 1602

SQLServer中使用SUBSTRING截取字符串

SUBSTRING  返回字符、binary、text      或      image      表达式的一部分。有关可与该函数一起使用的有效      Microsoft®      ...
  • F7ANTY
  • F7ANTY
  • 2013年12月01日 21:10
  • 1656

SQL Server中截取字符串的函数

SQL Server 中截取字符串常用的函数:      1.LEFT ( character_expression , integer_expression )   函数说明:LEFT ( '...
  • a364416036
  • a364416036
  • 2016年08月16日 09:13
  • 1683

SQL Server中截取字符串常用函数

SQL Server 中截取字符串常用的函数:      1.LEFT ( character_expression , integer_expression )   函数说明:LEFT ( '...
  • zisongjia
  • zisongjia
  • 2017年01月06日 15:44
  • 558

TSQL 字符串函数:截断和查找

字符串截断函数是指:Stuff 和 SubString,字符串查找函数是:CharIndex 和 PatIndex 一,SubString 截取子串 最常用的字符串函数,用于截取特定长度的子串。 ...
  • jiangfei009003
  • jiangfei009003
  • 2016年12月15日 13:58
  • 407
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:sqlserver 分段截取字符串
举报原因:
原因补充:

(最多只允许输入30个字)