Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL, където JSON съдържа празен масив

Ето два начина да го направите, тествайки на 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": []} |
+--------------+

Намерих друго решение, което помага да се проверява стриктно за празен масив:

Първо вижте, че имам два реда и единият има непразен масив:

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)

Сега се уверявам, че дължината на масива е 0 като начин да потвърдя, че е празен:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. използвайки mysqli за предотвратяване на инжектиране на sql, как да задам NULL или CURRENT_DATE?

  2. Заявка за регулярни изрази в хибернация

  3. Презареждане на .env променливи без рестартиране на сървъра (Laravel 5, споделен хостинг)

  4. Вложеният CAST не работи

  5. MySQL ГРУПА По брой