1

整数列を文字列に追加したいのは、自動的にインクリメントされる数値部分を持つ varchar 変数を生成する必要があるためです。例えば、P000001,P000002...

テーブルの作成中に行っていることを行うために、auto_increments する int フィールド ID を取得し、P を 00000 と ID 値で連結しています

私が作成したテーブルは次のとおりです。

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

キーワードとしてのエラーが表示されます。助けてください

4

3 に答える 3

1

MySQL のドキュメント ( http://dev.mysql.com/doc/refman/5.1/en/create-table.html ) には、「デフォルト値は定数でなければなりません。関数または式にすることはできません」と記載されています。後で SELECT の一部として、PatientID 値を取得してみませんか。

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

「P」の後に 6 桁が必要なようです。次の式を試してください。

CONCAT('P', LPAD(ID, 6, '0'))
于 2013-03-27T19:55:07.400 に答える
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 に答える