我想将文本存储为浮点数。我的问题是,这个文本有不同的格式,我不能影响它。我的TEXT列包含类似
的字符串357000
218000.56
500.000.00
转换前两个字符串时没有问题。我在转换最后一个时遇到问题,因为小数点是与千位分隔符相同的字符。
我该如何处理这个问题?是否使用我可以定义的格式显式转换字符串到浮点数?
编辑:我忘了说,在上述情况下,最后一次。 (如果有的话)始终是小数分隔符,如果后跟两位数字。因此,'153.650'应该转换为153650。答案 0 :(得分:1)
“编辑:我忘了说,在上面的情况下,最后一个。(如果有的话)总是>十进制分隔符,如果后跟两位数字。所以,'153.650'应该转换以> 153650为例。“
有你的答案。
检查索引处的字符(yourString.Length - 3)是否是分隔符之一。如果是,那么你有一个十进制值;如果没有,你就不会。继续去除所有无关的符号,然后在正确的索引处重新插入您选择的小数分隔符。
清洁?不,但情况很糟糕,TBH。
答案 1 :(得分:0)
你可以试试这个
CONVERT(
REPLACE(REPLACE(value, '.', ''), ',', '.'),
DECIMAL(10,2))
这将取代。并且,从您的字符串,并将其转换为十进制(10,2)。 根据你的
SELECT
IF(
LENGTH(
SUBSTRING_INDEX('351.000', '.', - 1)
) >= "3",
CONVERT(
REPLACE("351.000", ".", ''),
DECIMAL (10, 2)
),
CONVERT(
CONCAT(
REPLACE(
LEFT(
'351.000',
LENGTH("351.000") - LOCATE('.', REVERSE("351.000"))
),
'.',
''
),
CONCAT(
".",
SUBSTRING_INDEX('351.000', '.', - 1)
)
),
DECIMAL (10, 2)
)
)
我试过
1234.56给出1234.56
1234.000.00给出1234000.00
和1234.000给出1234000
但这不是在mysql查询中做这么多的好方法。你应该在编程部分处理它
答案 2 :(得分:0)
在将数据提供给SQL之前更正数据 - 编程语言更简单,例如使用正则表达式替换。
s = s.replaceAll("\\D(\\d\\d\\d)", "$1").replaceFirst("\\D". ".");
(不考虑标志!) 它首先删除非数字后跟三位数,然后从第一个剩余的非数字开始。可以做得更聪明。
以上是Java,但正则表达式存在于所有合理的编程语言中。
答案 3 :(得分:0)
MySQL 5.5.32架构设置:
CREATE TABLE Table1
(`TEXT` varchar(10))
;
INSERT INTO Table1
(`TEXT`)
VALUES
('357000'),
('218000.56'),
('500.000.00')
;
查询1 :
SELECT CAST(concat(
REPLACE(CASE WHEN substr(TEXT,-3,1) = "." THEN substr(TEXT,1,length(TEXT)-3)
ELSE TEXT END,'.',''),
CASE WHEN substr(TEXT,-3,1) = "." THEN right(TEXT,3)
ELSE '' END) AS decimal(12,2)
) AS Amount
FROM Table1
<强> Results 强>:
| AMOUNT |
|-----------|
| 357000 |
| 218000.56 |
| 500000 |