HSQL 中的大写
Posted
技术标签:
【中文标题】HSQL 中的大写【英文标题】:Upper case in HSQL 【发布时间】:2018-06-12 18:59:45 【问题描述】:有什么方法可以为 HSQL 创建表中的元素创建默认的大写值
CREATE TABLE IF NOT EXISTS "job" (
"id" INTEGER IDENTITY,
"jobId" BIGINT ,
"jobName" VARCHAR(100) ,
PRIMARY KEY ("jobName")
);
现在我需要每次都将 jobName 存储为大写。
【问题讨论】:
内置函数可以切换小写或大写值,您可以像这样使用:SELECT UPPER(jobName) FROM job
。我会避免创建另一列来存储不同情况下的相同数据。
【参考方案1】:
对于HSQLDB,生成列的解决方案(类似于mysql的解决方案)是:
CREATE TABLE IF NOT EXISTS "job" (
"id" INTEGER IDENTITY,
"jobId" BIGINT ,
"jobName" VARCHAR(100) ,
"jobNameU" VARCHAR(100) GENERATED ALWAYS AS (UPPER("jobName")),
PRIMARY KEY ("jobNameU")
);
BEFORE INSERT 触发器有一个更好的解决方案,它可以在没有额外生成的列的情况下工作:
CREATE TABLE IF NOT EXISTS "job" (
"id" INTEGER IDENTITY,
"jobId" BIGINT ,
"jobName" VARCHAR(100) ,
PRIMARY KEY ("jobName")
);
CREATE TRIGGER makeUpper BEFORE INSERT ON "job" REFERENCING NEW ROW AS NEW
FOR EACH ROW
SET NEW."jobName" = UPPER(NEW."jobName")
【讨论】:
【参考方案2】:您可以使用计算/生成的列:
-- MySQL
CREATE TABLE job (
id INT AUTO_INCREMENT,
jobid INT ,
jobName VARCHAR(100) ,
jobNameU VARCHAR(100) GENERATED ALWAYS AS (UPPER(jobName)) STORED,
PRIMARY KEY (jobNameU),
KEY(id)
);
INSERT INTO job(id, jobid, jobName)
VALUES (1,2,'aaa');
INSERT INTO job( jobid, jobName)
VALUES (2,'aaA')
-- Duplicate entry 'AAA' for key 'PRIMARY'
DBFiddle Demo
【讨论】:
以上是关于HSQL 中的大写的主要内容,如果未能解决你的问题,请参考以下文章
C语言编写程序,将一个字符串中的大写字母转换为对应的小写字母,小写字母转换为对应的大写字母,并统计数
JAVA中的常量是必须大写吗?比如final double PI=3.14