将格式编号的列检查添加到oracle编号
我需要向表中添加一列,检查输入是否为999到999的最大值,如足球比赛分数。我该如何写这份声明 例如:将格式编号的列检查添加到oracle编号,oracle,add,alter,Oracle,Add,Alter,我需要向表中添加一列,检查输入是否为999到999的最大值,如足球比赛分数。我该如何写这份声明 例如: | Score | --------- | 1-2 | | 10-1 | |999-999| | 99-99 | Oracle 11g R2架构设置: CREATE TABLE SCORES (Score ) AS SELECT '1-2' FROM DUAL UNION ALL SELECT '10-1' FROM DUAL UNION ALL SE
| Score |
---------
| 1-2 |
| 10-1 |
|999-999|
| 99-99 |
Oracle 11g R2架构设置:
CREATE TABLE SCORES (Score ) AS
SELECT '1-2' FROM DUAL
UNION ALL SELECT '10-1' FROM DUAL
UNION ALL SELECT '999-999' FROM DUAL
UNION ALL SELECT '99-99' FROM DUAL
UNION ALL SELECT '1000-1000' FROM DUAL;
SELECT SCORE,
CASE WHEN REGEXP_LIKE( SCORE, '^\d{1,3}-\d{1,3}$' )
THEN 'Valid'
ELSE 'Invalid'
END AS Validity
FROM SCORES
| SCORE | VALIDITY |
|-----------|----------|
| 1-2 | Valid |
| 10-1 | Valid |
| 999-999 | Valid |
| 99-99 | Valid |
| 1000-1000 | Invalid |
查询1:
CREATE TABLE SCORES (Score ) AS
SELECT '1-2' FROM DUAL
UNION ALL SELECT '10-1' FROM DUAL
UNION ALL SELECT '999-999' FROM DUAL
UNION ALL SELECT '99-99' FROM DUAL
UNION ALL SELECT '1000-1000' FROM DUAL;
SELECT SCORE,
CASE WHEN REGEXP_LIKE( SCORE, '^\d{1,3}-\d{1,3}$' )
THEN 'Valid'
ELSE 'Invalid'
END AS Validity
FROM SCORES
| SCORE | VALIDITY |
|-----------|----------|
| 1-2 | Valid |
| 10-1 | Valid |
| 999-999 | Valid |
| 99-99 | Valid |
| 1000-1000 | Invalid |
:
CREATE TABLE SCORES (Score ) AS
SELECT '1-2' FROM DUAL
UNION ALL SELECT '10-1' FROM DUAL
UNION ALL SELECT '999-999' FROM DUAL
UNION ALL SELECT '99-99' FROM DUAL
UNION ALL SELECT '1000-1000' FROM DUAL;
SELECT SCORE,
CASE WHEN REGEXP_LIKE( SCORE, '^\d{1,3}-\d{1,3}$' )
THEN 'Valid'
ELSE 'Invalid'
END AS Validity
FROM SCORES
| SCORE | VALIDITY |
|-----------|----------|
| 1-2 | Valid |
| 10-1 | Valid |
| 999-999 | Valid |
| 99-99 | Valid |
| 1000-1000 | Invalid |
为什么要将其存储为单个字符串列,而不是两个数字列,这可能需要频繁解析?我知道这没有意义,但我是一名学生,问题要求以这种方式编写。请帮忙,你试过什么?如果我被迫这样做,我会使用正则表达式。不知道你的课程是否涵盖了这一点,也不知道它是否希望你使用较旧的
instr
和substr
函数。前几天有人做了这个作业。尝试搜索。