最近开始玩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
人好少啊,也许很多人并没有写出自己的所在地:
更多区块链文章: