日期:2014-05-17 浏览次数:20420 次
--我要查询出【库存表】里面的【库存代码】字段为【abc】临近的数据信息,每页只显示100条;方便查询 --···我表里有1W条数据 --···比如说 abcdefgh 我要查D临近的,2到3位就可以了;包括D在其中! --显示结果如下: --···第一种显示结果:bcDef --···第二种显示结果:abcDefg
DECLARE @t VARCHAR(30) SET @t='abcdefgh' SELECT SUBSTRING(@t,CHARINDEX('d',@t)-2,CHARINDEX('d',@t)+1) SELECT SUBSTRING(@t,CHARINDEX('d',@t)-3,CHARINDEX('d',@t)+3)
------解决方案--------------------
看了叶子的回答才知道什么意思。
------解决方案--------------------
--> 测试数据:[tb] IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb] GO CREATE TABLE [tb]([name] VARCHAR(50)) INSERT [tb] SELECT 'abcaaaa' UNION ALL SELECT 'abcdefghzzz' UNION ALL SELECT 'xxooabcdfghfhfgh' UNION ALL SELECT 'xxacdfg' UNION ALL SELECT 'ooabcd' --------------开始查询-------------------------- DECLARE @str VARCHAR(50),@rand INT SET @str='abcd' SET @rand=3 SELECT NAME, 第一种=SUBSTRING(NAME,CHARINDEX(@str,name)+1,CASE WHEN LEN(NAME)-CHARINDEX(@str,name)-@rand<=LEN(@str) THEN LEN(@str) ELSE LEN(NAME)-CHARINDEX(@str,name)-@rand END), 第二种=SUBSTRING(NAME,CHARINDEX(@str,name),CASE WHEN LEN(NAME)-CHARINDEX(@str,name)-@rand<=LEN(@str) THEN LEN(@str) ELSE LEN(NAME)-CHARINDEX(@str,name)-@rand END) FROM [tb] WHERE CHARINDEX(@str,name)>0 ----------------结果---------------------------- /* NAME 第一种 第二种 -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- abcdefghzzz bcdefgh abcdefg xxooabcdfghfhfgh bcdfghfh abcdfghf ooabcd bcd abcd (3 行受影响) */
------解决方案--------------------
charindex判断长度
substring截取
------解决方案--------------------
like %_D_%
like %__D__%
------解决方案--------------------
like '__' + '某字符' + '__' -->此处2条下划线(_) like '___' + '某字符' + '___' -->此处3条下划线(_)
------解决方案--------------------
like 在语句中很耗性能,建议尽量少的适用like. 用嫂子的不错。[img=http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/2.gif][/img]
------解决方案--------------------