2

我正在我的 sql 工作台中创建一个存储过程。我正在修改地址的邮政编码以使用 7 个字符的邮政编码格式化“dn35 7tg”,即使用户没有插入空格。

首先,我找不到将变量打印到控制台屏幕的方法,这对我的情况没有帮助。

运行 Call 语句时

CALL usp_addsupplier('Bobs shopping mania', 'dn465th');

我除了找到以正确格式输入到数据库中的值外,我得到的只是在列中输入的 PK、Null 和 Null。

如果有人能指出我正确的方向,我会很高兴

谢谢你们。

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `usp_addsupplier`(IN SuppliersName VARCHAR(30), IN SuppliersPostCode VARCHAR(15))

BEGIN


-- Declare the change varables
DECLARE postcode VARCHAR(8) DEFAULT SuppliersPostCode;

SET postcode = SuppliersPostCode;

-- Postcode reformat -----------------------------------------------

-- Change postcode to uppercase

SET postCode = UPPER(postCode);

-- Grabs the first 4 letters and stores them in a new varable

SET new_postcode = LEFT (postCode,4);

-- Adds the space to the first 4 letters

SET new_postcode = new_postcode + ' ';

-- Add the last 3 letters to the new varable

SET new_postcode = new_postcode + RIGHT(postCode,3);

INSERT INTO tblsupplier (SupplierName, SupplierPostCode VALUES (new_name, new_postcode));

END
4

2 回答 2

1

我在 MySQL 上不是很好,但是有几个错误让我跳出来。

首先,您new_name在插入之前从未设置过,所以这将始终为空。

其次,我不认为 MySQL 喜欢使用字符串连接StringA + StringB,你需要使用CONCAT(StringA, StringB)

第三,您的插入命令中存在语法错误(正如 eggyal 所指出的)。

但是,在单独的注释中,您的逻辑将无法正确格式化英国邮政编码。例如,M1 1AA 是完全有效的英国邮政编码:

M1 1AA -->  M1 1 1AA
M11AA  -->  M11A 1AA

如您所见,“格式化”的邮政编码一团糟。您可以使用INSERT函数以更简单的方式实现此目的。英国邮政编码是可变数量的字符 (2-4),后跟一个空格,后跟 3 个字符。

第一步应该是清理输入(根据我的测试Fiddle假设为 @PostCode )

REPLACE(@PostCode, ' ', '');

这将删除所有空格,因此原始输入是否有空格无关紧要。

然后,您需要在字符串末尾插入一个空格 3 个字符。要找到这个位置,您可以使用:

CHAR_LENGTH(@PostCode) - 2

这给出了最终结果:

UPPER(INSERT(REPLACE(@PostCode, ' ', ''), CHAR_LENGTH(REPLACE(@PostCode, ' ', '')) - 2, 0, ' ')))

所以这一切都可以在一个电话中完成:

SET @SupplierName = 'Test';
SET @PostCode = 'M 1 1 A A   ';

INSERT INTO tblSupplier (SupplierName, SupplierPostCode )
VALUES (@SupplierName, UPPER(INSERT(REPLACE(@PostCode, ' ', ''), CHAR_LENGTH(REPLACE(@PostCode, ' ', '')) - 2, 0, ' ')));
于 2012-05-01T10:44:31.523 回答
0
  1. 您的INSERT命令中有语法错误:

    INSERT INTO tblsupplier (SupplierName, SupplierPostCode VALUES (new_name, new_postcode));
    

    应该改为

    INSERT INTO tblsupplier (SupplierName, SupplierPostCode) VALUES (new_name, new_postcode);
    
  2. 你需要DECLARE你的变量new_namenew_postcode.

  3. 您需要为new_name.

于 2012-05-01T10:00:22.290 回答