⑴ 如何在sql语句中查询只带数字的字段
你应该希望提取的字段只要含有数字就提出,剔除空和不含数字的字符串。
select * from table where regexp_substr(check,'[0-9]+') is not null
⑵ SQL取字段中某一部分特定数值
如果只是固定取"20/30"比较容易, 只需找到"20/30"在此字符串的开始位置,再截取5个字符的长度就可以了,如:
SELECT CASE WHEN CHARINDEX('mgdf13hj44jjjgasetrxzc20/30nj5weyu45f5645gjhkdfjkg', '20/30') > 0 THEN SUBSTRING('mgdf13hj44jjjgasetrxzc20/30nj5weyu45f5645gjhkdfjkg', CHARINDEX('mgdf13hj44jjjgasetrxzc20/30nj5weyu45f5645gjhkdfjkg', '20/30'),5) ELSE '' END
如果不一定是20/30,而是与"/"前后关联的数字(eg: 14/20, 33/66,等...),就麻烦了,你可能需要写一个抽取字符串的函数,如: f_substr(),然后在SQL里调用:
select 用户.f_substr('mgdf13hj44jjjgasetrxzc20/30nj5weyu45f5645gjhkdfjkg')
⑶ sql 如何查询包含某一字段的值
这种情况需要写存储过程,进行全库搜索。代码如下:
declare@cloumnsvarchar(40)
declare@tablenamevarchar(40)
declare@strvarchar(40)
declare@countsint
declare@sqlnvarchar(2000)
declareMyCursorCursorFor
Selecta.nameasColumns,b.,sysobjectsb,systypesc
wherea.id=b.id
andb.type='U'
anda.xtype=c.xtype
andc.namelike'%varchar%'
set@str='张三'
OpenMyCursor
FetchnextFromMyCursorInto@cloumns,@tablename
While(@@Fetch_Status=0)
Begin
set@sql='select@tmp_counts=count(*)from'+@tablename+'where'+@cloumns+'='''+@str+''''
executesp_executesql@sql,N'@tmp_countsintout',@countsout
if@counts>0
begin
print'表名为:'+@tablename+',字段名为'+@cloumns
end
FetchnextFromMyCursorInto@cloumns,@tablename
End
CloseMyCursor
DeallocateMyCursor
注意:其中“张三”为要查找的字符串,可以替换成其他的,如果查询的字符串超长,需要在定义变量时适当扩大长度。
可以替换成其他的,如果查询的字符串超长,需要在定义变量时适当扩大长度。
⑷ sql语句 查询字段中包含某个数字的列信息
select * from info where (',' + id + ',') like ('%,' + '9' +',%')
⑸ SQL怎么查询某一个数字在字段中
select * from test where value like '4'
你只要用查询器打开数据库test
然后输入上面语句。
搜索结果就会出来了。 。
上面两个一个创建表和插入数据的。
跟查询没关系的。。
⑹ 如何把SQL SERVER中一个含有数字的字符串找出来
在SQL SERVER 2005中,将表中字符串转换为数字的函数共2个:
1. convert(int,字段名) 例如:select convert(int,'3')
2. cast(字段名 as int) 例如:select cast('3' as int)
其实,一般情况下没有必要把字符串转换为数字类型
假如需要比较两个字段是否相等,但是一个字段为字符串类型,一个为数字类型,用“=”比较两个值是否相等时,SQL SERVER会自动把字符串转换为数字再比较的!
例如:
select da.TITLE_NAME,dsc.NAME
from dbo.DV_DUTY dd
inner join DV_SECOND_CLASS dsc on (dsc.ID=dd.AREA)
left join DV_ASSET da on(da.ID=dd.RECORD_ID and dd.TYPE='2')
where dd.AREA is not null
这个SQl中,inner join DV_SECOND_CLASS dsc on (dsc.ID=dd.AREA) 中dsc.ID为数字类型,dd.AREA为字符类型,相当于这样on(1='1')的判断,这时候就会自动吧字符串的'1'转换为数字类型再比较的。
但是也有弊端,一旦字符类型转换为数字类型出错(说明字符串的确就非数字组成的),SQL就会抛出异常。
SQL SERVER 2005中有判断字段是否为数字的函数:
ISNUMERIC(字段名) -----假如字段是数字类型返回1,不是就返回0
但是好像有的时候不好使,比如:select isnumeric('3,34') 就返回1
说明这个函数对字段值中全是数字但是数字间用“,”和“.”(逗号或点)隔开的都视为数字了!
⑺ sql语句 查询字段中包含某个数字的列信息
select * from 表 where ','+列4+',' like('%,2,%')
一般情况下,像这种序列填充列,在设计时不会在列中的前后加逗号,可能的数据:
2 或者 2,22 又或者 0,1,2
所以一般放在查询中人为的给列值前后加逗号,再模糊匹配.
⑻ sql语句中对一个字段排序,字段中含有字符串和数字,(怎根据数字进行排序)
order by 字段名称+0 desc/asc的形式进行排序
order by 字段名称*1 desc/asc的形式进行排序