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