sql >> Database >  >> RDS >> Mysql

MySQL waar JSON een lege array bevat

Hier zijn twee manieren om het te doen, testen op MySQL 5.7.24:

mysql 5.7.24> select config from mytable 
  where json_contains(config, cast('[]' as json), '$.tier');
+--------------+
| config       |
+--------------+
| {"tier": []} |
+--------------+

mysql 5.7.24> select config from mytable 
  where json_contains_path(config, 'one', '$.tier');
+--------------+
| config       |
+--------------+
| {"tier": []} |
+--------------+

Ik heb een andere oplossing gevonden, die helpt om strikt te controleren op een lege array:

Kijk eerst dat ik twee rijen heb, en een heeft een niet-lege array:

mysql 5.7.24> select config from mytable 
  where json_contains(config, json_array(), '$.tier');
+----------------------------------------+
| config                                 |
+----------------------------------------+
| {"tier": []}                           |
| {"tier": [{"name": "BK", "value": 8}]} |
+----------------------------------------+
2 rows in set (0.00 sec)

Nu zorg ik ervoor dat de lengte van de array 0 is om te bevestigen dat deze leeg is:

mysql 5.7.24> select config from mytable 
  where json_contains(config, json_array(), '$.tier') 
  and json_length(config, '$.tier') = 0; 
+--------------+
| config       |
+--------------+
| {"tier": []} |
+--------------+
1 row in set (0.00 sec)


  1. Magento installeren - Identificatienaam is te lang

  2. Hoe kan ik een primaire sleutelreeks in Django veilig doorsturen?

  3. Panda's schrijven dataframe naar ander postgresql-schema

  4. Waarom heb ik hier NullPointerException?