现在要查询一个字段至少包括两个中文字,高分急求SQL语句,谢谢~~~
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了现在要查询一个字段至少包括两个中文字,高分急求SQL语句,谢谢~~~相关的知识,希望对你有一定的参考价值。
分数后来补充,只要能回答这个问题,我加70分,一共100分。谢谢!!重谢!!
select * from table where patindex('%[吖-座]%',字段) > 0--[吖-座]是中文字符集第一个到最后一个的范围
这个是判断是否有中文追问
这边咋会报错啊。。PATINDEX invalid identifier 是不是函数名打错了。不会是你写的函数吧。。。
追答patindex('%[吖-座]%',字段名)>0
SQL中 patindex函数的用法 2011-01-11 15:04:05| 分类: SQL语法 | 标签: |字号大中小 订阅 .
patindex函数的用法
语法格式:PATINDEX ( '%pattern%' , expression )
返回pattern字符串在表达式expression里第一次出现的位置,起始值从1开始算。
pattern字符串在expression表达式里没找就返回0,对所有有效的文本和字符串就是有效的数据类型。
描述一下此函数的具体用法:
貌似没错啊
对了,大哥,我忘了说了,我有的是ORACLE,你用的数据库是?
追答Oracle里面如何识别存储字段里面是否存在中文,方法有二:
1、使用length和lengthb,如果中文的话length是一个字符,但是lengthb是两个字节。但是这个方法不适合数据库字符集非gbk的情况。
select * from t where length(c1) != lengthb(c1);
2、使用asciistr函数得出是否字段里面包含“/”,因为当中文字符转换为ascii后,变成“/FFFD/FFFD”,但是需要注意一个特殊字符“/”,当它出现的时候转换后的码为“/005C”
SQL> select asciistr('//)(-=!@#$%^&*~中文字符') from dual;
ASCIISTR('//)(-=!@#$%^&*~中文字符')
-----------------------------------------------------------
//005C)(-=!@#$%^&*~/FFFD/FFFD/FFFD/FFFD/FFFD/FFFD/FFFD/FFFD
这个页面我也在网上搜索到了,但是两种方法都不行。因为length != lengthb 不能说明这个字符就是汉字,也可能是全角符,也可能是日文,等等等。还是得按汉字编码来。。。patindex 这个函数ORACLE里确实没有,这是哪个数据库中的函数?SQL SERVER?
追答sql 的 23.模糊子串的位置 --返回2,参数去掉中间%则返回7
S:select patindex('%d%q%','sdsfasdqe') value
O:oracle没发现,但是instr可以通过第四霾问刂瞥鱿执问?BR> select INSTR('sdsfasdqe','sd',1,2) value from dual 返回6
你看看这个行不
这个不行,因为instr不能用这样的形式:[吖-座],只能给定子字符串然后到母字符串中去找,而不是匹配中文。很感谢您的耐心回答,真心的感谢。
追答.....
参考技术A select * from biao where ziduan like '%汉字1%汉字2%' or ziduan like '%汉字2%汉字1%' ?追问不是,只要这个字段里面有两个中文字就行,不管是什么中文字(当然不包括全角符)
追答那就要写函数了,挺麻烦的
追问悲剧了…… SQL里面能用正则表达式么?正则表达式能否实现这样的功能?(非常感谢您能耐心地回答我的问题,O(∩_∩)O~)
我开始是这样想的:
select length('my name is 我是一只鱼 fish') from dual; --计算得字符数为:21
select lengthb('my name is 我是一只鱼 fish') from dual; --计算得字节数为:26
相差5,正好就是中文字的个数,但是后来发现不行。。。中文的全角符也是两个字节。哎!!
以上是关于现在要查询一个字段至少包括两个中文字,高分急求SQL语句,谢谢~~~的主要内容,如果未能解决你的问题,请参考以下文章