sql 查询字段是中文/英文/数字 正则表达式
一、包含中文字符select * from 表名 where 列名 like '%[吖-座]%'二、包含英文字符select * from 表名 where 列名 like '%[a-z]%' 三、包含纯数字select * from 表名 where 列名 like '%[0-9]%'
上面的正则表达式,只能用like选出该字段中含有中文/英文/数字的人,那如果需求是选出姓名全部是中文的人,要如何做?
sqlserver中有函数len,以及datalength
可将字段名强制类型转换成为varchar类型,根据db中长度,赋予强制类型一定的长度,注意千万不要太小,导致删除了部分字符
英文 数字 符号 转为字符后,len和datalength长度一致
中文,len的2倍=datalength长度
MySQL:
char定义存储字符,实际存储也是按照字符形式存储,大小char(255个字符),注意不是字节。
在此说下字符与字节的区别?
字节是计算机中存储信息的单位,一个字节占八位,字符是A、B、C等以及一些符号,一般在计算机中用一个字节表示,也就是说一般占一个字节,但还有不一般,根据特定编码每个字符所占的字节数不同,就如在gbk,gb2312中一个汉字占两个字节,但国际通用编码格式utf-8中一个汉字占3个字节。
因此char在utf8编码下最多可存储255*3个字节的数据,无论是单独的一个汉字,还是英文字母都是一个字符,只是所占字节不同而已,Soga,char(255个字符),
不管是sqlserver还是MySQL存储,如果存储的字符没有255个会以英文空格字符的形式填满。这就是所谓的定长。
下面说说varchar(0-65532个字节)定义的是字符,但是实际以字节的形式进行存储,最多可以存储Max(65532)个字节,因此在utf8编码形式下最多存储65532/3-1个字符,在gbk编码下,最多存储65532/2-1,为什么会减一呢?因为MySQL的机制会留1-3个字节来存储该字符串的长度。多了这个用来记录长度的结果就可以做到动态变化,而不需要像char那样用空格填充剩余空间,减少内存消耗,但同样也增加了内耗,影响了性能。
举个例子:定义了name字段:varchar(60),为其填充数据张三,则只占用6个字节,剩余54个字节未被占用,上例如果定义name字段为char(60),同样填充数据张三的话,虽然也是占用6个字节,但剩余58个字符会用空格填充,实际占用60个字符所耗空间
sqlserver:
先说说nvarchar和varcahr的区别:
varchar: 可变长度,存储ANSI字符,根据数据长度自动变化。
nvarchar: 可变长度,存储Unicode字符,根据数据长度自动变化。
varchar[(n)]:长度为 n 个字节的可变长度且非 Unicode的字符数据。n 必须是一个介于 1 和 8,000之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节
nvarchar(n) :包含 n个字符的可变长度 Unicode 字符数据。n 的值必须介于1与4,000 之间。字节的存储大小是所输入字符个数的两倍。
从以上可以看出nvarchar是以字符方式存储, 因为用Unicode编码,这里大家可以看看这篇博客:各种编码的详解:http://blog.csdn.net/lvxiangan/article/details/8151670
因此可以说是规定nvarchar是双字节存储,不管你存储的是汉字还是英文字母都是占两个字节,
分析优缺点:
优点:判断字符串的时候可以不需要考虑中英文两种字符的差别,可以避免程序中乱码的问题。
缺点:存储英文字符会增大一倍的存储空间.但是在存储代价已经很低廉的情况下,优先考虑兼容性会给你带来更多好处的,效率没有varchar高。
char在此不做多解释与MySQL情况一致。
一般使用情况说明:
存储的数据长度确定如电话号码,编码等固定的,而且不包中文的,可以选择char类型。
存储的数据长度不确定,存储只有英文、数字的最好用varchar
存储的数据长度不确定,也有可能有中文,可以选择nvarchar类型。
转载于:https://www.cnblogs.com/qianjinyan/p/10302760.html
sql 查询字段是中文/英文/数字 正则表达式相关推荐
- sql查询字段中是否包含数字
PATINDEX('%[0-9]%',Telephone)>0 转载于:https://www.cnblogs.com/nanapig77/archive/2012/06/08/2542043. ...
- Oracle查询字段以外的内容,Oracle查询字段内容为非数字的记录
今天在一张3W多记录的表里查非数字的异常数据~数据库太水,记录一发,因为2.5使用人员误输入为2..5.... select t.routecardlist_id,trim(translate(RTR ...
- SQL 查询字段包含特殊符号的数据
SQL 查询字段包含特殊符号的数据 SQL 查询字段中包含单引号 查询的时候输入两个单引号就转义了 ,chr(39) 表示单引号.chr(40)表示双引号 eg: select * from XX.T ...
- sql查询字段的值不为空
sql查询字段的值不为空 SQRJS IS NOT NULL AND SQRJS <![CDATA[ <> ]]> ''
- sql查询字段重复的数据 并且修改数据某个字段
1.sql查询字段重复的数据 并且修改所有行某个字段值 UPDATE 表名 a SET a.要修改的字段名 = 1 WHEREa.重复字段 IN (SELECTb.重复字段FROM(SELECTc.重 ...
- mysql 在sql查询语句结果中,数字加千分逗号
mysql 在sql查询语句结果中,数字加千分逗号 FORMAT(X,D) 将number X设置为格式 '#,###,###.##', 以四舍五入的方式保留到小数点后D位, 而返回结果为一个字符串. ...
- SQL判断字段中是否存在数字、汉字、字母、英文
--1.判断是否存在汉字 select * from 表名 where 列名 like '%[吖-座]%'--2.判断是否存在汉字以外的其他字符 select * from 表名 where 列名 l ...
- 利用VBA批量删除Excel中的中文/英文/数字或者替换中英文符号
↓↓↓欢迎关注我的公众号,在这里有数据相关技术经验的优质原创文章↓↓↓ 在Excel中经常会遇到去除所有的中文,英文或者数字等情况.但是由于Excel并不支持一次替换所有的中文,英文,数字等,所以有些 ...
- php判断账号英文,php 判断是否是中文/英文/数字示例代码
$str='asb天水市12'; if (preg_match("/^[\x7f-\xff]+$/", $str)){ echo '全部是汉字'; }else { echo '不全 ...
- php 正则 中文英文,php 用户名正则表达式(中文,英文,数字,字母)
由字母a-z(不区分大小写).数字0-9.减号或下划线组成,只能以数字或字母开头和结尾 用户名长度为4-18个字符:^[a-za-z0-9]{1}[a-za-z0-9|-|_]{2-16}[a-za- ...
最新文章
- php fastcgi配置_IIS7.5配置php(FastCGI)- 自动配置
- AI删库,程序员背锅?
- 我终于决定要放弃 okhttp、httpClient,选择了这个牛逼的神仙工具!贼爽
- 【Leetcode】组合、排列、子集、切割(回溯模板和去重方法)
- ASP.NET MVC3 技术(二) WebGrid 的使用方法
- windows改变php版本
- Linux系统中如何添加自己的库文件路径
- react jest测试_如何使用Jest和react-testing-library测试Socket.io-client应用程序
- ubantu中怎样安装VMware Tools
- [paper reading] Faster RCNN
- 人工智能时代都需要哪些数学知识?这些经典教材给你划重点
- 根据开始日期,结束日期,计算出日历上有几周的方法
- 【安全牛学习笔记】离线密码破解
- 地形地貌编辑软件world mechine介绍
- latex显示错误:Text line contains an invalid character. l.1
- java 变量 英文_Java中的字符类型变量无论是中文,英文还是数字,都是占4字节。...
- mysql日期vlog
- 加权平均资本成本【读书笔记】
- HTML+CSS+JS实现鼠标点击特效富强民主文明方法
- C语言中的static的作用~