我有一列VARCHAR
类型的数据,我希望CONVERT
或CAST
为整数(我的最终目标是将我的所有数据点都作为整数) 。但是,我尝试的所有查询都返回0
的值。
我的数据如下:
1
2
3
4
5
如果我运行以下任一查询:
SELECT CONVERT(data, BINARY) FROM table
SELECT CONVERT(data, CHAR) FROM table
我的结果是:
1
2
3
4
5
那里没有惊喜。但是,如果我运行以下任一查询:
SELECT CONVERT(data, UNSIGNED) FROM table
SELECT CONVERT(data, SIGNED) FROM table
我的结果是:
0
0
0
0
0
我已经搜索了SO和谷歌来解决这个问题,没有运气,所以我想我会在这里尝试专业人士。
EDIT / UPDATE
我对评论中的建议进行了一些额外的查询,结果如下:
data LENGTH(data) LENGTH(TRIM(data)) ASCII(data)
1 3 3 0
2 3 3 0
3 3 3 0
4 3 3 0
5 3 3 0
看来我的数据本身存在问题。对于遇到此帖子的任何人:此时我的解决方案是TRIM
从数据点中过量,然后CONVERT
到UNSIGNED
。感谢您的帮助!
进一步编辑/更新
经过一番研究后发现,我的数据中隐藏了NULL
个字节。这个问题的答案有助于:How can I remove padded NULL bytes using SELECT in MySQL
答案 0 :(得分:1)
SELECT data, LENGTH(data), LENGTH(TRIM(data)), ASCII(data) FROM table
返回什么?您的数字字符串可能只是数字字符串。
或者,您使用的是多字节字符编码吗?
答案 1 :(得分:1)
我相信你的查询很好;因为它对我有用:sqlfiddle.com/#!2/a15ec4/1/3。
让我觉得你有数据问题。您确定某处的数据中没有返回或空格吗?
你可以通过尝试对数据执行长度或ascii来检查数据,看看你是否有超过预期的数据:
select ascii(data) from foo where ascii(data) not between 48 and 57
或
select length(data) as mLEN from table having mlen>1
的长度。
答案 2 :(得分:0)
我相信这是正确的形式:
SELECT CAST(data AS UNSIGNED) FROM test;
SELECT CAST(data AS SIGNED) FROM test;
答案 3 :(得分:0)
试试这些语法
SELECT CONVERT(data, UNSIGNED INTEGER) FROM table
或
SELECT CAST(data AS UNSIGNED) FROM table