MySQL: триггер для прописной буквы каждого слова - PullRequest
0 голосов
/ 31 мая 2018

Так вот, ребята,

У меня есть таблица, содержащая это :

CREATE TABLE IF NOT EXISTS `people` (
`Id_People` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`Firstname` varchar(20) NOT NULL,
`Lastname` varchar(20) NOT NULL,
PRIMARY KEY (`Id_People`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1002 ;

Как установить триггер, который будет использовать первую буквумое имя и фамилия?


Всякий раз, когда я добавляю кого-либо,

На вкладке :

INSERT INTO people (Firstname, Lastname) VALUES ('doe', 'john')

Всякий раз, когда я редактируюкто-то,

И при обновлении :

UPDATE people SET Lastname = 'smith', Firstname= 'jane' WHERE Id_People = 1;

И это даже с двуствольным именем, таким как: Джон Смит (имя) Доу (фамилия)

1 Ответ

0 голосов
/ 31 мая 2018

Могу предположить, что вы используете СУБД MySql.

MySql не предоставляет стандартную функцию для прописной буквы в каждом слове.

Во-первых,

Создайте эту функцию:

DELIMITER $$
CREATE FUNCTION `capitalize`(s varchar(255)) RETURNS varchar(255) 
BEGIN
  declare c int;
  declare x varchar(255);
  declare y varchar(255);
  declare z varchar(255);

  set x = UPPER( SUBSTRING( s, 1, 1));
  set y = SUBSTR( s, 2);
  set c = instr( y, ' ');

  while c > 0
    do
      set z = SUBSTR( y, 1, c);
      set x = CONCAT( x, z);
      set z = UPPER( SUBSTR( y, c+1, 1));
      set x = CONCAT( x, z);
      set y = SUBSTR( y, c+2);
      set c = INSTR( y, ' ');     
  end while;
  set x = CONCAT(x, y);
  return x;
END$$

Во-вторых,

Создание триггеров для обновления и вставки

CREATE TRIGGER frst_l_up_insert BEFORE INSERT ON people FOR EACH ROW
SET NEW.Firstname = capitalize(NEW.Firstname), NEW.Lastname = capitalize(NEW.Lastname);

CREATE TRIGGER frst_l_up_update BEFORE UPDATE ON people FOR EACH ROW
SET NEW.Firstname = capitalize(NEW.Firstname), NEW.Lastname = capitalize(NEW.Lastname)

Наконец,

Обновление записи о существовании в таблице

UPDATE people SET Lastname = capitalize(Lastname), Firstname = capitalize(Firstname);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...