MySQL Select * FROM table WHERE 列(JSON 对象)特定值的字符串长度 <1

Posted

技术标签:

【中文标题】MySQL Select * FROM table WHERE 列(JSON 对象)特定值的字符串长度 <1【英文标题】:MySQL Select * FROM table WHERE a column's (JSON Object) specific value's string length is <1 【发布时间】:2022-01-18 03:01:38 【问题描述】:

我需要从提交列在 JSON 对象中具有空“电子邮件”值的表中返回所有记录。查询应该只返回下表中的记录 15 和 17。

 +------------+--------------------+----------------------------------+
 | id | name               | submission                               |
 +------------+--------------------+----------------------------------+
 | 13 | Chris Sale         | "gender":"m","email":"xyz@abc.com"   |  
 | 14 | Amy Verlander      | "gender":"f","email":"123@abc.com"   |  
 | 15 | CC Sabathia        | "gender":"f","email":""              |  
 | 16 | Sonny Grey         | "gender":"m","email":"nko@abc.com"   |  
 | 17 | Jen Chapman        | "gender":"m","email":""              |  
 +------------+--------------------+----------------------------------+

感谢您的帮助, 托德

【问题讨论】:

SELECT VERSION() 返回什么?最佳答案取决于您使用的版本。 @bill "VERSION() 5.7.36-log"。谢谢!我期待看到您的回答。 【参考方案1】:

您的描述不是有效的 JSON,您可以在 jsonlint 进行测试

这只会测试是否有看起来像电子邮件的东西,但如果它真的存在则不准确

CREATE TABLE table1 (
  `id` INTEGER,
  `name` VARCHAR(13),
  `submission` TEXT
);

INSERT INTO table1
  (`id`, `name`, `submission`)
VALUES
  ('13', 'Chris Sale', '["gender":"m","email":"xyz@abc.com"]'),
  ('14', 'Amy Verlander', '["gender":"f","email":"123@abc.com"]'),
  ('15', 'CC Sabathia', '["gender":"f","email":""]'),
  ('16', 'Sonny Grey', '["gender":"m","email":"nko@abc.com"]'),
  ('17', 'Jen Chapman', '["gender":"m","email":""]');
SELECT * FROM table1 WHERE submission->>"$[*].email"  NOT REGEXP '^[^@]+@[^@]+\.[^@]2,$'
编号 |姓名 |提交 -: | :------------ | :---------------------------- 15 | CC 萨巴蒂亚 | ["gender":"f","email":""] 17 |仁查普曼 | ["gender":"m","email":""]

db小提琴here

【讨论】:

【参考方案2】:

你应该使用这个:

SELECT * FROM your_tb where submission NOT like N'%"email": ""%';

如果您需要检查空值,则此 where 条件检查性别不为空。你可以试试这个查询:

SELECT * FROM your_tb where submission NOT like N'%"email": ""%' and submission NOT like N'%"email": ""%';

【讨论】:

感谢您的回答。您能否更新它,以便检查提交列中 JSON 对象的“电子邮件”值的字符串长度? 如果您需要检查电子邮件是否存在值,您可以使用相同的查询,但将性别替换为单词 email。它做同样的事情【参考方案3】:

试试下面的代码,看看是否有帮助

SELECT * FROM table WHERE CHAR_LENGTH(submission) > 1

参考:https://www.w3schools.com/sql/func_mysql_char_length.asp

【讨论】:

能否请您更新一下,使提交的电子邮件值为

以上是关于MySQL Select * FROM table WHERE 列(JSON 对象)特定值的字符串长度 <1的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL IF SELECT COUNT() 大于零 select * from table else return nothing found

MYSQL中 select * from table1 t1, table2 t2 where t1.name= t2.name

MySQL SELECT * WHERE column ='value'from 2 tables

Mysql DB select from table where field语句java

mysql随机抽取数据

MySql SELECT * FROM table_name WHERE col_name IN (任何值)