Mysql转换位到char不工作



我试图将查询的结果作为另一个查询的参数,除了具有位数据类型的此字段外,所有工作都很好。所以我试图使用convert()和cast()转换字段的值,但它似乎不工作,因为它返回一个小矩形的这个奇怪的符号,它有三个0和一个1。所以谁能告诉我为什么会发生这种情况以及如何修复它,这是我的查询

select CONVERT(isMale , char(5)) from person;

,事情是它给了我正确的答案,当我不使用转换,但因为我把这个结果给另一个查询作为参数,它导致我的问题。

您可以这样使用BIN函数:

SELECT  BIN(isMale +0) from person;

MariaDB [yourschema]> SELECT  BIN(b'1001' +0) ;
+-----------------+
| BIN(b'1001' +0) |
+-----------------+
| 1001            |
+-----------------+
1 row in set (0.00 sec)
MariaDB [yourschema]>

下面是一些来自MariaDB手册的内容:

在不同的数进制之间转换数字。返回一个数字N的字符串表示形式,从base from_base转换而来To base to_base.

如果任何参数为NULL,或者第二个或第三个参数为NULL,则返回NULL参数不在允许范围内。

参数N被解释为整数,但可以指定为整数或字符串。最小底是2,最大底是36. 如果to_base为负数,则将N视为有符号数。否则,N被视为无符号。CONV()适用于64位精度。

此函数的一些快捷方式也可用:BIN(), OCT(),十六进制(),UNHEX()。此外,MariaDB允许二进制文字值和十六进制文字值。

BIN是CONV(value,from,to)的缩写形式,您可以将其从基数转换为基数

so binary 1001 = 9 as int

这里我给出了十进制(14)的值,并将其从以10为基数转换为以2为基数

MariaDB [yourschema]> SELECT CONV(14,10  ,2);
+-----------------+
| CONV(14,10  ,2) |
+-----------------+
| 1110            |
+-----------------+
1 row in set (0.00 sec)

那么,如果你想让左边是0你可以像这样添加一个值

MariaDB [yourschema]> SELECT CONV(8192 + 14,10  ,2);
+------------------------+
| CONV(8192 + 14,10  ,2) |
+------------------------+
| 10000000001110         |
+------------------------+
1 row in set (0.00 sec)

然后你可以从右边得到n个字符:

MariaDB [yourschema]> SELECT RIGHT(CONV(8192 + 14,10  ,2),8);
+---------------------------------+
| RIGHT(CONV(8192 + 14,10  ,2),8) |
+---------------------------------+
| 00001110                        |
+---------------------------------+
1 row in set (0.40 sec)
MariaDB [yourschema]>

我认为你想使用CAST

 select CAST(isMale as CHAR) from person;

看到@Bernd Buffen的回答,我尝试使用+0转换,它的工作,即使我不知道为什么

select CONVERT(isMale +0, char(5)) from person;

最新更新