如何在SQL中分离和显示单词中的不同字母?
发布时间:2020-12-12 16:34:19 所属栏目:MsSql教程 来源:网络整理
导读:昨天在工作面试中我被问到这个问题,我没有任何线索.假设我有一个字“曼哈顿”我只想显示字母’M’,’A’,’N’,’H’,’T’ 在SQL中.怎么做? 任何帮助是赞赏. 解决方法 那么这里是我的解决方案( sqlfiddle) – 它的目的是使用一个“关系SQL”操作,这可能是面
昨天在工作面试中我被问到这个问题,我没有任何线索.假设我有一个字“曼哈顿”我只想显示字母’M’,’A’,’N’,’H’,’T’
在SQL中.怎么做? 任何帮助是赞赏. 解决方法那么这里是我的解决方案( sqlfiddle) – 它的目的是使用一个“关系SQL”操作,这可能是面试官在概念上所做的.所做的大部分工作只是将字符串转换成一组(pos,letter)记录,因为相关的最终应用DQL只是一个使用分组和排序的SELECT. select letter from ( -- All of this just to get a set of (pos,letter) select ns.n as pos,substring(ss.s,ns.n,1) as letter from (select 'MANHATTAN' as s) as ss cross join ( -- Or use another form to create a "numbers table" select n from (values (1),(2),(3),(4),(5),(6),(7),(8),(9)) as X(n) ) as ns ) as pairs group by letter -- guarantees distinctness order by min(pos) -- ensure output is ordered MANHT 上述查询在SQL Server 2008中可用,但“Numbers Table”可能需要针对其他供应商进行更改.否则,没有什么用的是供应商特定的 – 没有CTE,或交叉应用功能,或程序语言代码. 话虽如此,上面是展示一种概念性的方法 – SQL被设计为用于集合和关系以及跨越记录的多重性;在某种意义上,上述例子只是这样的歪曲. 检查中间关系, select ns.n as pos,1) as letter from (select 'MANHATTAN' as s) as ss cross join ( select n from (values (1),(9)) as X(n) ) as ns 使用cross join生成带有数字(9行)的字符串(1行)的笛卡尔乘积;然后使用字符串和每个数字应用子字符串函数,以根据其位置获取每个字符.结果集包含记录 – POS LETTER 1 M 2 A 3 N .. 9 N 然后,外部选择根据字母对每个记录进行分组,并且生成的记录按照建立分组的字母的最小(第一)出现位置排序. (没有信件的顺序将是不同的,但最终的订单将不会得到保证.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |