sql >> Databasteknik >  >> RDS >> Mysql

MySQL Cast som Boolean

Ibland kan du behöva casta data som boolesk i MySQL. Så här castar du som booleskt i MySQL. Vi kommer att titta på hur man kastar snöre som booleskt och kastar int som booleskt.

Hur man castar som booleskt i MySQL

Här är stegen för att casta som booleskt i MySQL. MySQL låter dig casta data med funktionerna CAST och CONVERT. Ingen av dem stöder dock konvertering till boolesk datatyp, direkt. Du måste casta som UNSIGNED INT istället. Låt oss titta på ett exempel för att kasta sträng som boolesk

Bonus Läs:MySQL CAST vs CONVERT

Hur man castar sträng som boolesk

Låt oss säga att du har följande strängkolumn produkt som innehåller strängvärden

mysql> select product from product_orders;
+---------+
| product |
+---------+
| A       |
| B       |
| C       |
| A       |
| B       |
| C       |
| A       |
| B       |
| C       |
+---------+

Låt oss säga att du vill konvertera strängen till boolesk där produkt =True om den är A else False, så här är SQL-frågan för att casta sträng som boolesk.

mysql> select cast(product='A' as unsigned) from product_orders;
+-------------------------------+
| cast(product='A' as unsigned) |
+-------------------------------+
|                             1 |
|                             0 |
|                             0 |
|                             1 |
|                             0 |
|                             0 |
|                             1 |
|                             0 |
|                             0 |
+-------------------------------+

Observera i ovanstående fråga,

1. Vi CASTAR till OSIGNERAD datatyp eftersom varken CAST- eller CONVERT-funktionerna stöder direkt konvertering till boolesk datatyp

2. MySQL sparar boolesk data som tinyint(1), det vill säga 1 eller 0, och inte True/False-värden. Eftersom tinyint enkelt kan sparas som osignerad int, konverterar vi sträng till osignerad int.

3. Vi använder ett villkorligt uttryck (product='A') inuti casten vars output är booleskt. Du kan inte direkt konvertera en strängkolumn till boolean med CAST eller CONVERT. Här är resultatet du får om du försöker göra det.

mysql> select cast(product as unsigned) from product_orders;
+---------------------------+
| cast(product as unsigned) |
+---------------------------+
|                         0 |
|                         0 |
|                         0 |
|                         0 |
|                         0 |
|                         0 |
|                         0 |
|                         0 |
|                         0 |
+---------------------------+

Du kan ändra det villkorliga uttrycket efter behov. Till exempel, här är SQL-frågan om du vill konvertera produkt =A eller produkt =B som sant och resten som falskt.

mysql> select cast(product='A' or product='B' as unsigned) from product_orders;
+----------------------------------------------+
| cast(product='A' or product='B' as unsigned) |
+----------------------------------------------+
|                                            1 |
|                                            1 |
|                                            0 |
|                                            1 |
|                                            1 |
|                                            0 |
|                                            1 |
|                                            1 |
|                                            0 |
+----------------------------------------------+

eller så kan du också använda följande fråga för att få samma resultat.

mysql> select cast(product in ('A','B') as unsigned) from product_orders;

Hur man castar Int som boolesk

Låt oss säga att du har följande int-kolumn belopp i din tabell.

mysql> select amount from product_orders;
+--------+
| amount |
+--------+
|    250 |
|    150 |
|    200 |
|    250 |
|    210 |
|    125 |
|    350 |
|    225 |
|    150 |
+--------+

Låt oss säga att du vill konvertera int till booleskt värde där belopp <200 är Sant, annars Falskt. Här är SQL-frågan för att casta int som boolesk.

mysql> select cast(amount<200 as unsigned) from product_orders;
+------------------------------+
| cast(amount<200 as unsigned) |
+------------------------------+
|                            0 |
|                            1 |
|                            0 |
|                            0 |
|                            0 |
|                            1 |
|                            0 |
|                            0 |
|                            1 |
+------------------------------+

Du kan också använda MySQL Convert i stället för MySQL CAST för var och en av ovanstående frågor. Här är ett exempel på ovanstående fråga, med MySQL CONVERT.

mysql> select convert(amount<200, unsigned) from product_orders;

Förhoppningsvis kan du nu enkelt casta som booleskt i MySQL.

Ubiq gör det enkelt att visualisera data på några minuter och övervaka i realtidsinstrumentpaneler. Prova det idag!

  1. Databaslösningar för byggledning

  2. Vad är nytt i SQL Server 2019?

  3. Hur man benchmarkar PostgreSQL-prestanda

  4. ORA-27154 / ORA-27146