【问题标题】:Upper case in HSQLHSQL 中的大写
【发布时间】: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。我会避免创建另一列来存储不同情况下的相同数据。

标签: mysql scala hsqldb


【解决方案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

    【讨论】:

      猜你喜欢
      • 2014-03-18
      • 2016-07-11
      • 1970-01-01
      • 1970-01-01
      • 2012-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多