mysql将bit转换为char不起作用

时间:2016-06-28 12:33:43

标签: mysql

我试图将查询结果作为另一个查询的参数提供,除了这个数据类型为bit的字段外,一切正常。所以我试图使用convert()和cast()来转换字段的值,但它似乎没有工作,因为它返回了一个小的矩形的这个奇怪的符号,它有三个0和一个1.所以任何人都可以告诉我为什么会发生这种情况以及如何解决它,这是我的查询

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

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

3 个答案:

答案 0 :(得分:2)

您可以像这样使用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_base转换而来   以to_base为基础。

     

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

     

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

     

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

BIN是来自CONV(值,从,到)的简短形式,您可以从基础转换为基础

所以二进制1001 = 9为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]>

答案 1 :(得分:0)

我认为你想使用CAST

This is under my controller

public function actionProducts()
{
$xml = Yii::$app->httpclient->get('http://localhost/MWSProducts/src/MarketplaceWebServiceProducts/Samples/GetMatchingProductSample.php');
      print_r($xml); 


      return $this->render('products',['items'=>$items]); 
}

答案 2 :(得分:0)

看到@Bernd Buffen回答我尝试使用转换为+0并且它有效,尽管我不知道为什么

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