如何在SQL中分离和显示单词中的不同字母?

前端之家收集整理的这篇文章主要介绍了如何在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

然后,外部选择根据字母对每个记录进行分组,并且生成的记录按照建立分组的字母的最小(第一)出现位置排序. (没有信件的顺序将是不同的,但最终的订单将不会得到保证.)

猜你在找的MsSQL相关文章