MySQL中,字符型數(shù)據(jù)可以用來(lái)表示數(shù)字。但是需要注意的是,這樣做可能會(huì)給計(jì)算帶來(lái)一些麻煩。下面我們通過(guò)實(shí)例來(lái)說(shuō)明。
mysql>select '123' + '456'; +-----------+ | '123' + '456' | +-----------+ | 579 | +-----------+
通過(guò)上面的查詢結(jié)果可以看出,MySQL將字符型的'123'和'456'轉(zhuǎn)換為數(shù)字類型進(jìn)行計(jì)算,并且得到正確的結(jié)果。但是,在某些特定情況下,運(yùn)算結(jié)果并不是正確的:
mysql>select '20' + '21 is the left'; +-----------------------+ | '20' + '21 is the left' | +-----------------------+ | 41 | +-----------------------+
由于'21 is the left'不是一個(gè)有效的數(shù)字,因此MySQL只將前面的'20'轉(zhuǎn)換為數(shù)字進(jìn)行計(jì)算,結(jié)果顯然是錯(cuò)誤的。
為了避免上述問(wèn)題,我們可以使用CAST函數(shù)將字符型數(shù)據(jù)強(qiáng)制轉(zhuǎn)換為數(shù)字類型。例如:
mysql>select CAST('20' AS UNSIGNED) + CAST('21 is the left' AS UNSIGNED); +-----------------------------------------------------+ | CAST('20' AS UNSIGNED) + CAST('21 is the left' AS UNSIGNED) | +-----------------------------------------------------+ | 41 | +-----------------------------------------------------+
通過(guò)強(qiáng)制轉(zhuǎn)換后,就可以得到正確的計(jì)算結(jié)果了。