Сохранять настоящую дату в переменной mysql

Я делаю процедуру в MySql, чтобы создавать листы в моей таблице котировка, как две цифры настоящего месяца + два последних настоящего года + индекс котировки нечто похожее C1119001, где 001 ссылается на индекс 1 из моей таблицы, проблема состоит в том, что он посылает мне ошибку You have an, ошибка in your SQL syntax; it seems the ошибка is around: ' if ((SELECT COUNT (*) from t_cotizaciones LIMIT 'at line...

CREATE DEFINER = CURRENT_USER PROCEDURE `crearFolio`( id_cliente int (100))

BEGIN
if((SELECT COUNT(*) from `t_cotizaciones` LIMIT 1)=0)
THEN 
set @folio := select concat('','C',Date_format(now(),'%m%y'),'001')

ELSE
if((SELECT MAX(id) from `t_cotizaciones` LIMIT 1)<=10)
THEN
set @var := concat("00",(SELECT MAX(id) from `t_cotizaciones` LIMIT 1)+1),
set @folio:=select concat('','C',Date_format(now(),'%m%y'),@var);

ELSEIF((SELECT MAX(id) from `t_cotizaciones` LIMIT 1)<100)
THEN
set @var := concat("0",(SELECT MAX(id) from `t_cotizaciones` LIMIT 1)+1) 
set @folio:=select concat('','C',Date_format(now(),'%m%y'),@var);

ELSE
set @var := concat((SELECT MAX(id) from `t_cotizaciones` LIMIT 1)+1) 
set @folio:= @folio := select concat('','C',Date_format(now(),'%m%y'),@var);
END if;
end if;

INSERT into `t_cotizaciones`(`id`, `folio`, `id_cliente`, `fecha`, `estatus`)values(null,@folio , id_cliente, now(),'1');

SELECT id FROM `t_cotizaciones` where folio = @folio;
END;
1
задан 08.11.2019, 21:16
1 ответ

Ты вредишь консультация, ты она, должно быть, делишь следующей формы: Сначала объяви, что переменная, чтобы вводить MaximoID

DECLARE vMaxid  INT DEFAULT 0;
DECLARE folio VARCHAR(3);
DECLARE fecha VARCHAR(4);

DespuГ©s, ты делаешь консультацию и с решением INTO, результат ты это вводишь в переменную vMaxid, не нуждаешься в LIMIT, с функцией MAX, всегда тебя приносит 1 единственный реестр

SELECT MAX(id) INTO vMaxid from `t_cotizaciones`;

Сейчас sГ, - уже podrГЎs использовать твой IF

if( vMaxid  <=10)

Для вопроса даты просто с нею funciГіn DATE_FORMAT, %m = в месяце, %y = последние две цифры aГ±o:

SET fecha = DATE_FORMAT(now(),'%m%y');

Следует упомянуть о том, что вместо того, чтобы использовать так IF, ты мог использовать функцию LPAD, для нулей izquiera:

SET folio = LPAD(vMaxid,3,"0");

, Которые переведенные означают, что он наполнит с нулем, до тех пор, пока Ваша длина не будет 3 символа, а именно, если vMaxid 100, не введет ningГєn нуль

Серьезная таблица с triger:

CREATE TABLE t_cotizaciones (
  id int(11) NOT NULL AUTO_INCREMENT,
  folio varchar(8) DEFAULT NULL,
  id_cliente int(11) DEFAULT NULL,
  fecha timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  estatus varchar(1) DEFAULT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE  TRIGGER crearFolio BEFORE INSERT ON t_cotizaciones FOR EACH ROW BEGIN
SELECT MAX(id) INTO @id from t_cotizaciones;
/*Si la tabla no tiene registros mandara NULL, como id*/
SET @id = IFNULL(@id+1,1) ;
SET NEW.folio = CONCAT('C',DATE_FORMAT(now(),'%m%y'),LPAD(@id,3,'0'));
END;

Только ты должен наполнять остальные данные, и лист создает автоматический

introducir la descripción de la imagen aquí

1
ответ дан 01.12.2019, 12:13