1

我想在字符串中添加一个整数列,因为我需要生成一个带有自动递增数字部分的 varchar 变量。例如,P000001,P000002...

为了做到这一点,我在创建表时正在做的事情,我采用了一个 int 字段 ID,它是 auto_increments 并且我将 P 与 00000 和 ID 值连接起来

我创建的表是:

CREATE TABLE tblAcceptTest(
ID int AUTO_INCREMENT NOT NULL primary key,
PatientID as CONCAT('P' , CONCAT('000000',CAST(ID as char)))
);

它向我显示了 as 关键字的错误。请帮忙

4

3 回答 3

1

MySQL 的文档 ( http://dev.mysql.com/doc/refman/5.1/en/create-table.html ) 说,“默认值必须是常量;它不能是函数或表达式。” 您为什么不稍后将 PatientID 值作为 SELECT 的一部分:

SELECT CONCAT('P', LPAD(ID, 6, 0)) AS PatientID FROM tblAcceptTest;
于 2013-03-27T20:00:55.717 回答
0

Mysql 对计算列的支持很少。您的规范中的患者 ID 可能是 char(7)

CREATE TABLE tblAcceptTest(
    ID int AUTO_INCREMENT NOT NULL primary key,
    PatientID char(7)
);

然后创建一些触发器。请注意,以下插入触发器将导致高并发服务器出现问题。

DELIMITER |

CREATE TRIGGER tblAcceptTest_insert BEFORE INSERT ON tblAcceptTest
  FOR EACH ROW BEGIN
    DECLARE next_id INT;
       SET next_id = (SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='tblAcceptTest');
    SET NEW.PatientID =  CONCAT('P' , RIGHT(CONCAT('000000',next_id),6)) ;
  END;
|

CREATE TRIGGER tblAcceptTest_update BEFORE UPDATE ON tblAcceptTest
  FOR EACH ROW BEGIN
     SET NEW.PatientID =  CONCAT('P' , RIGHT(CONCAT('000000',NEW.ID),6)) ;
  END;
|

DELIMITER ;

您使用关系和视图来实现相同的结果。

CREATE TABLE `patient` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `patient` varchar(60) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `accepted_test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `patient_id` int(11) NOT NULL,
  `accepted` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `patient_id` (`patient_id`),
  CONSTRAINT `accepted_test_ibfk_1` FOREIGN KEY (`patient_id`) REFERENCES `patient` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

create or replace view accepted_test_veiw as 
select CONCAT('P' , RIGHT(CONCAT('000000',patient_id),6)) patient_key
, accepted 
, id accepted_test_id
, patient_id
from accepted_test ;

select * from `accepted_test_veiw`
于 2013-03-27T21:05:48.050 回答
0

看起来你想要在“P”之后有六位数字,所以试试这个表达式:

CONCAT('P', LPAD(ID, 6, '0'))
于 2013-03-27T19:55:07.400 回答