我很确定这是不可能的,但我想问一下这里的专家是否有可能写一个SQL语句
Select * from ... Where [‘sent_to’]['bissness_id']=3516 .
如果是,那么它的语法是什么? (请参见下图)
答案 0 :(得分:1)
这样的事情会起作用:
select * from web_query where sent_to like '%"business_ids":["3516"]%';
或者,或者:
select * from web_query where sent_to like '%"business_ids":[%"3516"%]%';
但是你真的不应该将JSON存储为数据库列中的字符串值。它在几个层面上破坏了数据库的目的。
编辑:如果您想避免更改表结构但仍希望从数据库布局的结构改进中受益,您可以考虑编写一些将sent_to
解析为视图列的视图。 / p>
答案 1 :(得分:0)
这应该有效:
select * from web_query where sent_to like '%"business_ids":["3516"]%';
答案 2 :(得分:0)
尝试以下代码
SELECT * FROM TABLE_NAME t1
WHERE t1.sent_to.business_ids = 3516;
答案 3 :(得分:0)
如果您在sent_to列上只有businessIds,则可以执行以下操作:
Select * from ... Where sent_to LIKE '%"3516"%'
答案 4 :(得分:0)
我不认为你所要求的是什么,但你可以用简单的技巧做到这一点
select * from yourtable where sent_to like '%5060%'
这将使您获得业务ID为5060的行
如果你想根据你的要求提供更多的灵活性,你可以选择单独的表答案 5 :(得分:0)
不是一个非常明确的问题..
如果您必须满足sent_to中存在非“bissness_id”的内容,那么您需要明确:
DECLARE @FilterID Varchar(10) = '"3516"'
Select * from ... Where sent_to LIKE '%'+@FilterID+'%'
AND sent_to LIKE '%business_ids%'
如果该列只有“bissness_id”,则更简单
DECLARE @FilterID Varchar(10) = '"3516"'
Select * from ... Where sent_to LIKE '%'+@FilterID+'%'
因为在你的例子中你在where子句上有一个整数..如果这是故意的,那么你可以使用转换:
DECLARE @FilterInt Int = 3516
DECLARE @FilterID Varchar(10) = '"' + CAST(3516 AS Varchar(10)) + '"'
Select * from ... Where sent_to LIKE '%'+@FilterID+'%'
AND sent_to LIKE '%business_ids%'