sql >> Databáze >  >> RDS >> Mysql

MySQL Cast jako Boolean

Někdy může být potřeba přetypovat data jako booleovská v MySQL. Zde je návod, jak přetypovat jako boolean v MySQL. Podíváme se na to, jak přetypovat řetězec jako booleovský a přetypovat int jako booleovský.

Jak přenášet jako Boolean v MySQL

Zde jsou kroky k přetypování jako boolean v MySQL. MySQL umožňuje přenášet data pomocí funkcí CAST a CONVERT. Žádný z nich však již po vybalení nepodporuje převod na booleovský datový typ. Místo toho musíte přenést jako UNSIGNED INT. Podívejme se na příklad přetypování řetězce jako boolean

Bonusové čtení:MySQL CAST vs CONVERT

Jak přenést řetězec jako booleovský

Řekněme, že máte následující sloupec řetězce produkt který obsahuje řetězcové hodnoty

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

Řekněme, že chcete převést řetězec na booleovský, kde produkt =True, pokud je A else False, pak zde je dotaz SQL pro přetypování řetězce jako booleovský.

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

Ve výše uvedeném dotazu mějte na paměti,

1. Převádíme do datového typu UNSIGNED, protože ani funkce CAST ani CONVERT nepodporují přímou konverzi na datový typ boolean

2. MySQL ukládá booleovská data jako tinyint(1), to znamená 1 nebo 0, a nikoli hodnoty True/False. Protože tinyint lze snadno uložit jako unsigned int, převedeme řetězec na unsigned int.

3. Používáme podmíněný výraz (product=’A’) uvnitř přetypování, jehož výstup je booleovský. Řetězcový sloupec nelze přímo převést na booleovský pomocí CAST nebo CONVERT. Zde je výstup, který získáte, pokud se o to pokusíte.

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

Podmíněný výraz můžete upravit podle potřeby. Zde je například dotaz SQL, pokud chcete převést produkt =A  nebo produkt =B na hodnotu true a zbytek na hodnotu false.

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 |
+----------------------------------------------+

nebo můžete také použít následující dotaz k získání stejného výsledku.

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

Jak přenést Int jako Boolean

Řekněme, že máte následující int sloupec částka ve vaší tabulce.

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

Řekněme, že chcete převést int na boolean, kde částka<200  je True, jinak False. Zde je dotaz SQL pro přetypování int jako booleovský.

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

Můžete také použít MySQL Convert místo MySQL CAST pro každý z výše uvedených dotazů. Zde je příklad výše uvedeného dotazu pomocí MySQL CONVERT.

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

Doufejme, že nyní můžete snadno přetypovat jako boolean v MySQL.

Ubiq usnadňuje vizualizaci dat během několika minut a sledování na řídicích panelech v reálném čase. Vyzkoušejte to ještě dnes!

  1. Výjimka SQLite při pokusu o odstranění řádku

  2. Jak zakážu referenční integritu v Postgres 8.2?

  3. Jaké nejdelší možné celosvětové telefonní číslo bych měl zvážit v SQL varchar(length) for phone

  4. Jak zrychlit SQL dotazy