我试图将查询的结果作为另一个查询的参数,除了具有位数据类型的此字段外,所有工作都很好。所以我试图使用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;