日期:2014-05-17 浏览次数:20550 次
--我要查询出【库存表】里面的【库存代码】字段为【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]
------解决方案--------------------