SQL选择Where子句语句

时间:2013-02-07 09:07:52

标签: mysql sql where-clause

我很确定这是不可能的,但我想问一下这里的专家是否有可能写一个SQL语句

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

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

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

6 个答案:

答案 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%'