请教:如何查询以指定字符开头和数字结尾的字符串 或者 如何简化这个语句

luoxp520 2008-08-27 04:08:51
请教:如何查询以指定字符开头和数字结尾的字符串 或者 如何简化这个语句
SELECT * FROM NewsSort WHERE (Tree LIKE '1,2,3,[0-9]')or (Tree LIKE '1,2,3,[0-9][0-9]')or(Tree LIKE '1,2,3,[0-9][0-9][0-9]')or(Tree LIKE '1,2,3,[0-9][0-9][0-9][0-9]')or(Tree LIKE '1,2,3,[0-9][0-9][0-9][0-9][0-9]')........
...全文
358 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
ChinaJiaBing 2008-08-28
  • 打赏
  • 举报
回复
charindex....................
fcuandy 2008-08-27
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 lgxyz 的回复:]
SQL codeselect isnumeric('1.1')
select isnumeric('1/1')
select isnumeric('1,1')

/*

-----------
1

(所影响的行数为 1 行)


-----------
0

(所影响的行数为 1 行)


-----------
1

(所影响的行数为 1 行)

*/



第三个明显不是数字,它的判断也是为真的
[/Quote]

兼容货币表示法,跟区域和格式显示有关,尽管不能转换,但被认为是有效的。
等不到来世 2008-08-27
  • 打赏
  • 举报
回复
来晚了。。

SELECT * FROM NewsSort
WHERE charindex(',1,2,3,', ','+Tree+',')=1 and charindex(',',Tree,4)=0
luoxp520 2008-08-27
  • 打赏
  • 举报
回复
谢谢各位兄台。。
今天真是长见识了
wgzaaa 2008-08-27
  • 打赏
  • 举报
回复
--不用多传参数
select * from #f where a like '1,2,3,%' and a not like '1,2,3,%[^0-9]%' --或者
select * from #f where a like '1,2,3,%' and stuff(a,1,len('1,2,3,'),'') not like '%[^0-9]%'
也是看到3楼的isnumeric过滤不够完全才写了这个。
lgxyz 2008-08-27
  • 打赏
  • 举报
回复
select isnumeric('1.1')
select isnumeric('1/1')
select isnumeric('1,1')

/*

-----------
1

(所影响的行数为 1 行)


-----------
0

(所影响的行数为 1 行)


-----------
1

(所影响的行数为 1 行)

*/


第三个明显不是数字,它的判断也是为真的
lgxyz 2008-08-27
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 chuifengde 的回复:]
还是用patindex或like ,isnumeric对'1,1'也视为数字
[/Quote]

对1,1也是会判断成数字的
反正这个函数少用
有太多问题
luoxp520 2008-08-27
  • 打赏
  • 举报
回复
没有呀。。
用了
SELECT * FROM NewsSort where tree like '1,2,3,%' and isnumeric(right(tree,len(tree)-(len('1,2,3,')-1)))=1 ;

没有出现isnumeric对'1,1'也视为数字的情况
chuifengde 2008-08-27
  • 打赏
  • 举报
回复
还是用patindex或like ,isnumeric对'1,1'也视为数字
luoxp520 2008-08-27
  • 打赏
  • 举报
回复
wgzaaa 兄台的方法 很好
只是传字符串的同时要多传一个参数就是字符串长度

SELECT * FROM NewsSort where tree like '1,2,3,%' and isnumeric(right(tree,len(tree)-(len('1,2,3,')-1)))=1 ;


lgxyz 2008-08-27
  • 打赏
  • 举报
回复
SELECT * FROM NewsSort WHERE  PATINDEX('[^0-9]',REPLACE(Tree ,'1,2,3,',''))=0  AND Tree LIKE '%1,2,3,%'
wgzaaa 2008-08-27
  • 打赏
  • 举报
回复
create table #f(a varchar(30))
insert #f select '1,2,3,1'
insert #f select '1,2,3,2'
insert #f select '1,2,3,3'
insert #f select '1,2,3,99999'
insert #f select '1,2,3,1,1'
insert #f select '1,2,3,4,5,6'
------------------------------------
select * from #f where a like '1,2,3,%' and stuff(a,1,6,'') not like '%[^0-9]%'
luoxp520 2008-08-27
  • 打赏
  • 举报
回复
查询以指定字符开头和数字结尾的字符串
关键就是结尾的字符一定是数字可能是单位的或者多位的

我不能得到是多少位只能用
SELECT * FROM NewsSort WHERE (Tree LIKE '1,2,3,[0-9]')or (Tree LIKE '1,2,3,[0-9][0-9]')or(Tree LIKE '1,2,3,[0-9][0-9][0-9]')or(Tree LIKE '1,2,3,[0-9][0-9][0-9][0-9]')or(Tree LIKE '1,2,3,[0-9][0-9][0-9][0-9][0-9]')........
luoxp520 2008-08-27
  • 打赏
  • 举报
回复
其实也不是第六位就一定是数字。。
要判断的是'1,2,3,'字符后的是数字。。。
lgxyz 2008-08-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 luoxp520 的回复:]
其实是一个tree的级别信息
也就是
1,2,3,1
1,2,3,2
1,2,3,3
1,2,3,99999
1,2,3,1,1
1,2,3,4,5,6
中我只想得到 '1,2,3,'+单个或者多位数字也就是
'1,2,3,'+'1'
'1,2,3,'+'2'
'1,2,3,'+'3'
'1,2,3,'+'99999'
而不想在再包含其它字符或者字母主要是不包含','符号
'1,2,3,'+'1,1'
'1,2,3,'+'4,5,6'
[/Quote]


还是完全不明白.............
chuifengde 2008-08-27
  • 打赏
  • 举报
回复
where tree like '1,2,3,%' and isnumeric(right(tree,len(tree)-6))=1 
luoxp520 2008-08-27
  • 打赏
  • 举报
回复
其实是一个tree的级别信息
也就是
1,2,3,1
1,2,3,2
1,2,3,3
1,2,3,99999
1,2,3,1,1
1,2,3,4,5,6
中我只想得到 '1,2,3,'+单个或者多位数字也就是
'1,2,3,'+'1'
'1,2,3,'+'2'
'1,2,3,'+'3'
'1,2,3,'+'99999'
而不想在再包含其它字符或者字母主要是不包含','符号
'1,2,3,'+'1,1'
'1,2,3,'+'4,5,6'
幸运的意外 2008-08-27
  • 打赏
  • 举报
回复
楼主朋友,意思再明确一些吧,不妨考虑一下,不以指定字符开头且指定字符结尾的表达吧.

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧