Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL子字符串包含一系列数据_Sql - Fatal编程技术网

SQL子字符串包含一系列数据

SQL子字符串包含一系列数据,sql,Sql,我想使用子字符串仅选择电子邮件地址 以下是我的专栏数据: [{"IsPrimary":false,"Address":"test@gmail.com","Type":"Other"}] 我的问题是: SELECT SUBSTRING(EmailJson, CHARINDEX('ess":"', EmailJson)+6, CHARINDEX('","Type', EmailJson)) From Respondents 问题是它并没有按照我认为的子字符串的方式工作。我希望它能给我一系列的字符

我想使用子字符串仅选择电子邮件地址

以下是我的专栏数据:

[{"IsPrimary":false,"Address":"test@gmail.com","Type":"Other"}]
我的问题是:

SELECT SUBSTRING(EmailJson, CHARINDEX('ess":"', EmailJson)+6, CHARINDEX('","Type', EmailJson)) From Respondents
问题是它并没有按照我认为的子字符串的方式工作。我希望它能给我一系列的字符。例如,我希望子字符串返回一个字符范围,如5-10。这个子字符串的工作方式是,我确定起始位置,然后确定从起始位置开始的时间


我怎样才能改变我的查询,只从列中返回电子邮件。

我同意上面的评论,即这不是一种优雅的方式,但如果确实需要使用子字符串,请查看下面的内容

我将此更改为与oracle合作,因为这是我可用的,我不确定您正在使用什么,但您应该能够从中获得想法

SELECT substr(EmailJson, (instr(EmailJson,"Type":"Other"', 'ess":"')+6), (instr(EmailJson,"Type":"Other"', '","Type') - (instr(EmailJson,'ess":"')+6))) From Respondents;

子字符串采用起始索引和长度,而不是两个索引如果真正难看的结构是一致的,您可以先在逗号上拆分它,然后在冒号上拆分以提取您想要的元素。SQL只是结构化查询语言—许多数据库系统都使用这种语言,但不是数据库产品。。。像字符串操作这样的事情是高度特定于供应商的-所以我们真的需要知道您使用的是什么数据库系统(以及哪个版本)(请相应地更新标记)…为什么要在数据库中存储JSON?为什么不把它分成三列呢?如果你使用Postgres,你可以升级到9.3,它有一些很好的JSON函数可以直接支持这一点@迈克尔958为什么不呢?这类似于将XML存储在数据库中。“没有优雅的方式”取决于所使用的DBMS。在Postgres中,这将是:
selectJSON\uextract\upath\utext(emailJson,'Address')
。这是一次性的活动。我这样做是为了永久删除JSON。仅将电子邮件插入数据库。