SQL 判断含有字母和数字的字符串,你想从一个表里筛选出部分行数据,筛选条件是你感兴趣的那个列只包含字母和数字字符,考虑下面的视图 V(SQL Server 用户需要把字符串连接操作符||替换为 +)。

SQL 判断含有字母和数字的字符串 问题描述

你想从一个表里筛选出部分行数据,筛选条件是你感兴趣的那个列只包含字母和数字字符,考虑下面的视图 V(SQL Server 用户需要把字符串连接操作符||替换为 +)。

视图 V 代表了你要查询的表,它包含如下所示的数据。

然而,你只希望从视图 V 中提取出如下所示的记录。

总之,你想过滤掉那些除了字母和数字还包含其他字符的行。

SQL 判断含有字母和数字的字符串 解决方案

首先找出字符串中所有可能出现的非字母数字字符,这似乎是更为直观的解决思路。但恰恰与之相反,我们发现从反面着手更容易:首先找出所有的字母字符和数字字符。如此一来,先把所有的字母字符和数字字符转换成一个单一的字符,然后就能把它们当作一个字符。这么做的好处是,经过转换处理之后这些字母和数字可以被当作一个整体来操作。一旦生成了原有字符串的副本,并把其中的字母字符和数字字符替换成某个指定的字符,很容易就可以将字母字符和数字字符从其他字符中分离出来。

DB2

使用 TRANSLATE 函数将字母字符和数字字符都替换成单一字符,然后找出那些除了该字符还包含其他字符的行。对于 DB2 用户来说,需要在视图 V 中调用 CAST 函数。否则,会因为数据类型转换错误而导致视图创建失败。转换为 CHAR 类型时尤其要注意,因为 CHAR 的长度是固定的(长度不足的部分会被填充上)。

MySQL

在 MySQL 中,视图 V 的语法稍有不同。

使用正则表达式能方便地找出包含非字母数字字符的行。

Oracle 和 PostgreSQL

使用 TRANSLATE 函数把字母字符和数字字符替换成单一字符,然后找出那些除了该字符还包含其他字符的行。对于 Oracle 和 PostgreSQL 而言,视图 V 不需要调用 CAST 函数。转换为 CHAR 类型时尤其要注意,因为 CHAR 的长度是固定的(长度不足的部分会被填充上)。如果确实需要转换类型,那么就转成 VARCHAR 或 VARCHAR2 类型。

SQL Server

因为 SQL Server 不支持 TRANSLATE 函数,我们必须遍历每一行数据,并找出那些包含非字母数字字符的行。有很多种办法可以实现这一点,下面的解决方案的思路是评估每个字符的 ASCII 值。

SQL 判断含有字母和数字的字符串 扩展知识

上述解决方案的关键在于能同时查看多个字符。通过使用 TRANSLATE 函数,我们可以很容易处理全部数字或全部字符,而且不需要循环枚举并逐一查看每个字符。

DB2、Oracle 和 PostgreSQL

视图 V 的 14 行数据里只有 9 行是字母字符和数字字符。为了筛选出只包含字母字符和数字字符的行,直接使用 TRANSLATE 函数即可。在本例中,TRANSLATE 函数把字符 0 ~ 9 和 a ~ z 都转换成了 a。一旦完成了这一转换,下一步就要比较转换后的行数据和一个(与当前行的数据)具有相同长度并且只包括 a 的字符串。如果二者相同,那么我们就可以认定该字符串仅由字母和数字构成,而且不含其他字符。

使用 TRANSLATE 函数(这里以 Oracle 语法为例)。

我们把全部数字和字母字符都替换成了一个独特的字符(我这里选择了 a)。一旦这种替换完成,那些仅由字母和数字组成的字符串就变成了一个由单一字符(本例中是 a)构成的字符串。这一点可以通过单独执行 TRANSLATE 函数来进行验证。

虽然字母字符和数字字符被替换掉了,但字符串的长度并没有发生变化。由于长度是一样的,被筛选出来的行就是那些调用了 TRANSLATE 函数之后返回值里只包括 a 的行。通过比较原字符串的长度和只包含 a 的字符串长度,我们保留了相等的行,过滤掉了其他的行。

最后一步就是只保留那些 TRANSLATED 和 FIXED 相等的字符串。

MySQL

WHERE 子句里的表达式如下所示:

上述条件使得那些仅包含数字和字母的行会被筛选出来。方括号里的取值范围 0-9a-zA-Z 表示所有可能出现的数字和字母。符号 ^ 表示否定,因而该表达式可被解释为“非数字或非字母”。返回值等于 1 代表 TRUE,0 代表 FALSE,因此整个表达式的意思是:“执行非数字和字母字符匹配操作,并返回结果等于 FALSE 的行。”

SQL Server

首先遍历视图 V 的每一行数据,DATA 列的每一个字符都会被作为一行返回。C 列的值代表了构成 DATA 值的每一个字符。

内嵌视图 X 不仅会逐行返回 DATA 列的每一个字符,还会提供每个字符的 ASCII 值。这是 SQL Server 的专有功能,ASCII 取值范围 48 ~ 122 代表了字母字符和数字字符。理解了这一点,我们就可以对 DATA 进行分组,并过滤掉 ASCII 值不在 48 ~ 122 范围内的值。

oracle如何判断数字中有字母,SQL 判断含有字母和数字的字符串相关推荐

  1. SQL 对含有字母和数字的列排序

    描述: 你有混合了字母和数字的数据,希望按照字母部分或者数字部分来排序.考虑如下所示的视图. create view V as select ename||' '||deptno as datafro ...

  2. php 任意字符串_php 生成任意长度字符串的类(只含有数字 只含有字母 混合数字和字母)...

    [php]代码库 /* * 生成随机字符串的类,默认只包含数字.大小写字母 */ class randomString { /* * 生成的字符串包含的字符设置 */ const NUMERIC_ON ...

  3. SQL 判断字段是否为中文、字母、数字

    SQL 判断字段是否为中文.字母.数字 ascii ( col ) 数字:48 - 57 字母:65 - 123 汉字:123+ 如:判断中文 select * from dws_new_role w ...

  4. sql判断字段是否含有中文,英文,数字

    sql判断字段是否含有中文 orcale中判断字段是否含有中文 mysql中判断字段中是否含有中文 SQL语句 统计某字段不包含特定字符串 orcale中判断字段是否含有中文 现有表 cs_name ...

  5. oracle判断非空并拼接,oracle sql 判断字段非空,数据不重复,插入多跳数据

     oracle sql 判断字段非空,数据不重复 select distinct(mobile) from wx_user_mobile where active_time is not null ...

  6. SQL判断某列中是否包含中文字符、英文字符、纯数字,数据截取

    SQL判断某列中是否包含中文字符.英文字符.纯数字 一.包含中文字符 select * from 表名 where 列名 like '%[吖-座]%' [吖-座]是中文字符集第一个到最后一个的范围,虽 ...

  7. php数字对应的大字母,PHP判断数字,字母,特殊符号,中文 - 米扑博客

    PHP 判断数字,字母,特殊符号,中文 代码如下: /** * 0 包含数字,字母,特殊符号 * @param unknown $str * @return 0 - 数字字母符号: 1 - 数字: 2 ...

  8. python判断是不是字母_python判断字符是否为字母和数字

    在使用python语言中的字符串方法时,可以使用它们判断字符串中是否有字母或数字或其他的构成.下面利用几个实例说明字符串方法的用法,操作如下:python学习网,大量的免费python视频教程,欢迎在 ...

  9. SQL 判断字段值是否有中文、英文、数字、提取中文、英文、数字

    –SQL 判断字段值是否有中文 create function fun_getCN(@str nvarchar(4000)) returns nvarchar(4000) as begin decla ...

最新文章

  1. 今天是第一次开博客,for--futurechild!!!
  2. 酸了!给湖北籍学生偷偷发慰问金,中文系还不用上网课,这个学校太贴心!...
  3. nginx.conf 基本配置模板和结构
  4. LetCode-算法-整数反转
  5. find 命令详解 基于文件大小,名字和权限等的查找策略以及-path和-prune的详细解释
  6. 【夯实PHP基础】PHP的反射机制
  7. CF 61E 树状数组+离散化 求逆序数加强版 三个数逆序
  8. How to build .apk file from command line
  9. CentOS 7 Hadoop安装配置
  10. Ansible:命令应用基础
  11. postfix 配置
  12. 【SW教程】重命名SOLIDWORKS文件时如何避免丢失相关零件的引用?
  13. 高分影像批处理第三回——RPC文件与几何校正
  14. 从ccps项目中学习bottle,sqlalchemy,jinja2
  15. android 隐藏图标_苹果手机竟然还有这么多隐藏小功能(一)
  16. 理解HTML HTTP API 和URL
  17. JAVA_OPTS设置
  18. coco训练集darknet_darknet-yolov3训练自己的数据集
  19. this.className的使用
  20. Nginx服务器搭建

热门文章

  1. 微信小程序授权获取手机号
  2. java怎么声明list_Java中的ArrayList或List声明
  3. 猿创征文|当我在追光 我与光同航--我与Java的技术成长之路
  4. 非官方谷歌地图 iOS 应用遭苹果下架
  5. 阿里巴巴区块链防食品欺诈平台进入试点阶段
  6. spring cloud gateway nacos搭建动态路由
  7. [转载]六十八个经典故事
  8. SQLyog 自动完成
  9. 【JDK】win 10 / win 11:jdk 8 升级为 jdk 17
  10. python制作英语小词典_如何用python(django)创建英语词典应用程序?