成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SQL中給varchar2(5)數(shù)據(jù)類型合適的約束

數(shù)據(jù)庫
本文將針對SQL Puzzles and Answers中的一道迷題,給大家詳細講解如何在SQL中給varchar2(5)數(shù)據(jù)類型加上合適的約束。

數(shù)據(jù)庫課,開始的部分講sql,講到create table和約束,在虎吧上給他們留了一道思考題,是從那本著名的SQL Puzzles and Answers里找的一道謎題,在原書上的解答其實是有錯誤的

請建立一新表,包含三個列,全部都是varchar2(5)數(shù)據(jù)類型要求給這個表上加上合適的約束,使第一個列只能輸入“不含字母的字符串”(就是全部由數(shù)字或特殊符號等組成),第二個列只能輸入“包含字母的字符串”,第三個列只能輸入“全部是字母的字符串”

寫出相關(guān)的create table語句

結(jié)果很快有一同學就解答出來了,并且把原書的錯誤也糾正了

隨后給出了問題的答案:

這是他給的原始答案

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約束,他后來自己也很快發(fā)現(xiàn)這個問題并且指出糾正。

2第一個check其實可以簡化為upper(a)=lower(a),第二個check可以簡化為upper(b)<>lower(b)

3第三個check使用的translate函數(shù)是神來之筆,原書上這個地方是錯的。但translate的通用性不好,最好有通用性更好的辦法

對于老虎的這個答案,顯然還存在很多問題。根據(jù)第三個問題的答案分析,老虎這里的字母指的是英文字母,否則第三個問題的答案就是不完整的。

那么下面就按照英文字母來理解題中所提到的字母,當然字母代表英文字母也是絕大部分情況下正常的理解。

其實第一題和第二題的答案思路是一樣的,通過UPPER和LOWER函數(shù)是否相等,來判斷一個字符是否英文字符。這種方法是很不嚴謹?shù)模?/P>

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

UP LO
-- --
Δ δ

這是一個最簡單的例子,要想知道不滿足這個條件的結(jié)果有多少,可以執(zhí)行下面的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  /

當然這里面大部分的結(jié)果是一個英文字母加上一個無法顯示的字符,但是既然可能存在這種現(xiàn)象,作為標準答案就可以考慮。何況,還有上面例子給出的希臘字符在內(nèi)的多種國家的字母。

憑經(jīng)驗或主觀判斷利用UPPER和LOWER來判斷是否是英文字符的方法存在很多的不確定性,除非像上面一樣驗證過所有的字符UPPER和LOWER的輸出結(jié)果。

其實對于這種問題,可以利用LTRIM、REPLACE、TRANSLATE等函數(shù)來判斷,當然對于高版本也可以使用正則表達式來進行判斷。所有上面這些方法的共同點是在函數(shù)中明確指出了所有的可能性,比如利用LTRIM的方法:LTRIM(UPPER(C), ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ’) IS NULL。

【編輯推薦】

  1. 在SQL Server中創(chuàng)建全局臨時表技巧
  2. 并行查詢讓SQL Server加速運行
  3. SQL Server 2005常見問題淺析
責任編輯:彭凡 來源: ITPUB
相關(guān)推薦

2024-05-20 10:20:37

數(shù)據(jù)庫存儲容量

2010-09-13 10:21:26

sql server2

2010-09-06 17:35:43

SQL函數(shù)

2010-08-10 17:17:59

2010-08-11 09:14:33

DB2數(shù)據(jù)類型

2010-07-22 17:57:40

2022-10-27 20:42:04

JavaScripJava編程語言

2010-05-26 17:05:48

MySQL數(shù)據(jù)類型

2023-09-28 12:35:34

SQL數(shù)據(jù)庫系統(tǒng)

2010-09-06 16:25:46

SQL函數(shù)

2010-09-13 09:45:17

sql server2

2010-10-19 15:54:38

sql server創(chuàng)

2010-07-26 14:21:25

SQL Server數(shù)

2010-06-28 14:30:08

SQL Server

2010-07-12 15:36:45

SQL Server

2010-07-20 15:54:02

SQL Server數(shù)

2010-07-22 17:47:32

SQL Server數(shù)

2011-03-16 15:07:10

DB2數(shù)據(jù)庫數(shù)據(jù)類型

2019-08-12 11:40:48

數(shù)據(jù)庫SQLite3數(shù)據(jù)類型

2022-03-01 23:31:29

Python編程語言變量
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 99热电影| 精品国产一二三区 | 亚洲一区二区三区在线播放 | 天天天天天天天干 | 久久aⅴ乱码一区二区三区 亚洲国产成人精品久久久国产成人一区 | 国产1区2区3区 | 国产丝袜一区二区三区免费视频 | 亚洲精品一区在线观看 | 4hu最新网址 | 蜜臀久久99精品久久久久久宅男 | 51ⅴ精品国产91久久久久久 | 国产黄视频在线播放 | 欧美九九九 | 欧美一区二区精品 | 亚洲成在线观看 | 国产精品99久久久久久www | 在线精品亚洲欧美日韩国产 | 午夜影院在线 | www日日日 | 久久午夜影院 | 亚洲国产成人在线视频 | 亚洲一区二区三区免费在线观看 | www国产成人免费观看视频,深夜成人网 | 欧美在线a | 午夜免费视频 | 91国在线高清视频 | 欧美一区在线看 | 日本电影免费完整观看 | 国产精品亚洲片在线播放 | 欧美亚洲激情 | 欧美精品一区二区三区在线播放 | 91精品国产综合久久久久久丝袜 | 久久国产精品99久久久大便 | 国产日韩一区二区三免费 | 亚洲高清视频在线观看 | 精品一区二区三区中文字幕 | 久久久久久国产一区二区三区 | 一区二区不卡 | 国产成人免费视频网站高清观看视频 | 久久久久久高潮国产精品视 | 中文字幕一级 |