解決を試みるための完全な例が提供されています。問題は、2 つの列 ('MUNTAX' AND 'SCHTAX') を追加し、結果をテーブル ('house') の 3 番目の列 ('TOTALTAX') に入れたいことです。ただし、列は整数ではなく varchar 型の価格であるため、計算する前に「$」記号と「,」を削除する必要があります。計算後、'$' と ',' を足し合わせた合計を varchar に戻す必要があります。
私がハングアップしているのは、合計を取得することです。
テーブルを作成します。
CREATE TABLE `house` (
`ID` int(10) unsigned NOT NULL auto_increment,
`MLS_NO` int(10) default NULL,
`AGENT` varchar(120) default NULL,
`DISP_ORDER` int(4) default NULL,
`ADDR` varchar(200) NOT NULL default '',
`PRICE` varchar(12) NOT NULL default '',
`PRTYPE` varchar(20) default NULL,
`BUILTYPE` varchar(30) default NULL,
`YEAR` varchar(4) default NULL,
`LAREA` decimal(10,0) default NULL,
`ROOM` decimal(10,0) default NULL,
`BEDROOM` decimal(10,0) default NULL,
`BATHROOM` decimal(10,0) default NULL,
`PWDRROOM` decimal(10,0) default NULL,
`GARAGE` decimal(10,0) default NULL,
`PARKING` decimal(10,0) default NULL,
`MUNTAX` varchar(30) default NULL,
`SCHTAX` varchar(30) default NULL,
`TOTALTAX` varchar(30) default NULL,
`DESCR` text,
`DEFAULTPIC` decimal(10,0) default NULL,
`ADTYPE` varchar(100) default NULL,
`DESCR_2` text,
PRIMARY KEY (`ID`),
KEY `Index_2` (`ADDR`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=122 ;
INSERT INTO `house` (`ID`, `MLS_NO`, `AGENT`, `DISP_ORDER`, `ADDR`, `PRICE`, `PRTYPE`, `BUILTYPE`, `YEAR`, `LAREA`, `ROOM`, `BEDROOM`, `BATHROOM`, `PWDRROOM`, `GARAGE`, `PARKING`, `MUNTAX`, `SCHTAX`, `TOTALTAX`, `DESCR`, `DEFAULTPIC`, `ADTYPE`, `DESCR_2`) VALUES (110, 8620825, 'N', NULL, '5871 FL', '$1,025,000.0', 'DETACHED', 'COTTAGE', NULL, '589', '10', '4', '3', '1', NULL, '4', '$7,774.42', NULL, 'NULL', 'Beautiful');
ストアド プロシージャ:
DELIMITER $$
DROP PROCEDURE IF EXISTS TotalTaxProc $$
CREATE PROCEDURE TotalTaxProc(IN MLS INT(10), OUT MUNFLO FLOAT(10), OUT SCHINT FLOAT(10), OUT TOTTAX VARCHAR(10))
BEGIN
DECLARE SCH VARCHAR(30);
DECLARE MUN VARCHAR(30);
SET SCHFLO=0.0;
SET MUNFLO=0.0;
SET TOTTAX='';
SELECT MUNTAX FROM house WHERE MLS_NO=MLS INTO MUN;
SELECT SCHTAX FROM house WHERE MLS_NO=MLS INTO SCH;
SET MUNFLO=IFNULL(REPLACE(REPLACE(MUN, '$', ''), ',', ''), 0);
SET SCHFLO=IFNULL(REPLACE(REPLACE(SCH, '$', ''), ',', ''), 0);
SET TOTTAX=CONCAT('$', MUNFLO + SCHFLO ) ;
SET TOTTAX=CONCAT(SUBSTRING_INDEX(TOTTAX, SUBSTRING(TOTTAX, -6), 1),',',SUBSTRING(TOTTAX, -6) );
UPDATE house SET TOTALTAX=TOTTAX WHERE MLS_NO=MLS;
END $$
DELIMITER ;
そして最後に呼び出し、
CALL TotalTaxProc(8620825,@MUNINT,@SCHINT,@TOTTAX);
SELECT @MUNINT,@SCHINT,@TOTTAX;
したがって、明らかに、TOTTAX が '$7,774.42' を与えるはずのコンマだけを取得します。