利用steem sql 寻找同城好友

Posted by 土猪 on October 20, 2018

最近开始玩SteemSql,就是些Sql语句,正好把sql给复习下,参考了几个帖子,没有免费的sql server studio,就找来了LinqPad免费版本,参考这个帖子配置下: https://justyy.com/archives/5198

然后每个人的所在城市信息在accounts这个view里面一个叫做‘json_metadata’的column里,要把这column解析出所在地的信息,懒得动脑筋,本着拿来主义,古为今用,洋为中用的原则,我参考了这个帖子: https://steemit.com/steemsql/@digimad/how-to-parse-the-json-fields-in-the-steemsql-database

其中最主要的就是这个substring和charindex在一起的解析: substring(substring(json_metadata,charindex(‘location’,json_metadata)+13,100),0,charindex(‘',substring(json_metadata,charindex(‘location’,json_metadata)+13,100))) as location_string

不过哥还是稍微研究了下这个解析过程的,比如,哥的json_metadata是酱紫的: “{"profile":{"cover_image":"","profile_image":"https://img.esteem.ws/gh5kwctkyx.jpg","about":"随缘 I am an engineer","location":"Melbourne, Australia","name":"Holroyd"}}”

先看看sql 中对substring的语义: SUBSTRING ( expression ,start , length )

再看看sql中对charindex的语义: CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )

嵌套在里面的一个substring: substring(json_metadata,charindex(‘location’,json_metadata)+13,100) 得到的就是”Melbourne, Australia","name":"Holroyd"}}”

charindex(‘',substring(json_metadata,charindex(‘location’,json_metadata)+13,100)就是把上述字符串中最近一个反斜杠“\”给找到,这样就对“Melbourne, Australia”这个字符串给提取了出来。

哥把文中sql语句稍作改变,我想找melbourne的同城steemians,就成了这样: SELECT id , name , substring(substring(json_metadata,charindex(‘location’,json_metadata)+13,100),0,charindex(‘',substring(json_metadata,charindex(‘location’,json_metadata)+13,100))) as location_string , created FROM [dbo].[accounts] WHERE json_metadata like ‘%Melbourne%’

order by created desc

人好少啊,也许很多人并没有写出自己的所在地:

更多区块链文章:


支付宝打赏

您的打赏是对我最大的鼓励!