SQL中给varchar2(5)数据类型合适的约束

数据库课,开始的部分讲sql,讲到create table和约束,在虎吧上给他们留了一道思考题,是从那本著名的SQL Puzzles and Answers里找的一道谜题,在原书上的解答其实是有错误的

请建立一新表,包含三个列,全部都是varchar2(5)数据类型要求给这个表上加上合适的约束,使第一个列只能输入“不含字母的字符串”(就是全部由数字或特殊符号等组成),第二个列只能输入“包含字母的字符串”,第三个列只能输入“全部是字母的字符串”

写出相关的create table语句

结果很快有一同学就解答出来了,并且把原书的错误也纠正了

随后给出了问题的答案:

这是他给的原始答案

create table x (a varchar2(5) check (upper(a)=a and lower(a)=a),

b varchar2(5) check (not upper(b)=b or not lower(b)=b),

c varchar2(5) check (length(translate(c,'

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',' '))=0));

这个答案还存在一些瑕疵

1每个列上还要给not null约束,他后来自己也很快发现这个问题并且指出纠正。

2第一个check其实可以简化为upper(a)=lower(a),第二个check可以简化为upper(b)<>lower(b)

3第三个check使用的translate函数是神来之笔,原书上这个地方是错的。但translate的通用性不好,最好有通用性更好的办法

对于老虎的这个答案,显然还存在很多问题。根据第三个问题的答案分析,老虎这里的字母指的是英文字母,否则第三个问题的答案就是不完整的。

那么下面就按照英文字母来理解题中所提到的字母,当然字母代表英文字母也是绝大部分情况下正常的理解。

其实第一题和第二题的答案思路是一样的,通过UPPER和LOWER函数是否相等,来判断一个字符是否英文字符。这种方法是很不严谨的:

SQL> SELECT UPPER(CHR(42660)), LOWER(CHR(42660)) FROM DUAL;

UP LO
-- --
Δ δ

这是一个最简单的例子,要想知道不满足这个条件的结果有多少,可以执行下面的PL/SQL代码:

SQL> SET SERVEROUT ON SIZE 1000000
SQL> BEGINITPUB
  2   FOR I IN 1..65535 LOOP
  3    IF UPPER(CHR(I)) != LOWER(CHR(I)) AND LENGTH(CHR(I)) = 1
  4     DBMS_OUTPUT.PUT_LINE(I || ':' || CHR(I));ITPUB个人空间t F[ Z+D;Y
  5    END IF;
  6   END LOOP;
  7  END;
  8  /

当然这里面大部分的结果是一个英文字母加上一个无法显示的字符,但是既然可能存在这种现象,作为标准答案就可以考虑。何况,还有上面例子给出的希腊字符在内的多种国家的字母。

凭经验或主观判断利用UPPER和LOWER来判断是否是英文字符的方法存在很多的不确定性,除非像上面一样验证过所有的字符UPPER和LOWER的输出结果。

其实对于这种问题,可以利用LTRIM、REPLACE、TRANSLATE等函数来判断,当然对于高版本也可以使用正则表达式来进行判断。所有上面这些方法的共同点是在函数中明确指出了所有的可能性,比如利用LTRIM的方法:LTRIM(UPPER(C), ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ’) IS NULL。

【编辑推荐】

  1. 在SQL Server中创建全局临时表技巧
  2. 并行查询让SQL Server加速运行
  3. SQL Server 2005常见问题浅析

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/297868.html<

(0)
管理的头像管理
上一篇2025-05-22 16:22
下一篇 2025-05-22 16:23

相关推荐

  • 骨干网络体系结构能干什么?骨干网络体系结构的作用

    骨干网络体系结构是现代信息社会的“超级高速公路网”,它通过分层设计、冗余备份和智能调度,确保海量数据在全球范围内高速、稳定、安全地传输,是支撑云计算、物联网及人工智能应用的底层基石,想象一下,如果你把互联网比作一个巨大的城市交通系统,那么骨干网络就是连接各个城市的主干道和立交桥,没有它,你的每一次微信发送、每一……

    2026-06-18
    0
  • 高io数据库可以干什么用?高io数据库适合什么场景

    高IO数据库的核心价值在于通过极高的读写吞吐量,解决海量数据场景下的性能瓶颈,是支撑高并发交易、实时分析及大规模内容分发的关键基础设施,在数字化转型的深水区,数据不再仅仅是静态的记录,而是流动的资产,传统的机械硬盘或普通SSD早已无法满足现代应用对速度的极致追求,高IO(Input/Output)数据库,就是那……

    2026-06-18
    0
  • 高io服务器性能如何?高io服务器适合什么场景

    高IO服务器并非单纯指代某种硬件,而是指在随机读写、高并发连接及小文件处理场景下,具备极致IOPS(每秒输入输出操作次数)和低延迟特性的计算资源,它是支撑现代高并发应用稳定运行的核心基石,在2026年的数字化浪潮中,业务负载早已从简单的静态页面展示演变为复杂的实时数据处理,许多开发者在排查系统瓶颈时,往往忽略了……

    2026-06-18
    0
  • 隔离网络空间哪里便宜?国内隔离网络空间价格

    隔离网络空间并没有统一的“便宜”标准,其成本高度取决于物理隔离等级、带宽需求及安全合规要求,通常物理网闸方案初期投入较高但长期运维成本低,而逻辑隔离方案虽初期便宜但存在潜在安全风险,建议根据业务敏感度选择混合隔离架构以平衡成本与安全,在数字化时代,企业构建独立网络环境的需求日益增长,但“隔离网络空间哪里便宜”这……

    2026-06-18
    0
  • 骨干网络体系结构设备为何故障?常见原因有哪些

    骨干网络体系结构设备故障的核心原因通常归结为硬件老化、配置错误、物理链路中断及外部攻击四大类,其中电源模块失效与光模块性能衰减是占比最高的隐性故障源,骨干网作为数字经济的“大动脉”,其稳定性直接关乎国计民生,当核心路由器或交换机出现丢包、震荡甚至宕机时,运维人员往往面临巨大的压力,很多人第一反应是检查软件配置……

    2026-06-18
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注