2

我很确定这是不可能的,但我想问问这里的专家是否可以写一条 SQL 语句来

Select * from ... Where [‘sent_to’]['bissness_id']=3516 . 

如果是,那么它的语法是什么?(请看下图)

Select * from ... where sent_to['bissness_id']=3516

4

6 回答 6

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为视图列的视图。

于 2013-02-07T09:14:52.377 回答
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%'
于 2013-02-07T09:59:06.340 回答
0

如果您的 sent_to 列上只有 businessIds,您可以简单地执行以下操作:

Select * from ... Where sent_to LIKE '%"3516"%'
于 2013-02-07T09:25:41.833 回答
0

我不认为你的要求可以做到,但你可以用简单的技巧做到这一点

select * from yourtable where sent_to like '%5060%' 

这将使您获得业务 ID 为 5060 的行

如果您想根据您的要求获得更大的灵活性,您可以选择单独的表格

于 2013-02-07T09:43:55.383 回答
0

这应该工作:

select * from web_query where sent_to like '%"business_ids":["3516"]%';
于 2013-02-07T09:22:51.823 回答
0

试试下面的代码

SELECT * FROM TABLE_NAME t1
WHERE t1.sent_to.business_ids = 3516;
于 2013-02-07T09:23:40.693 回答