如何用SQL查询逐行打印单词"hello"的每个字符(非PL/SQL)
纯SQL实现单词逐字符分行打印
没问题,这里给你几个不同数据库下的纯SQL解决方案,完全不用PL/SQL就能把"hello"的每个字符单独占一行输出~
Oracle 实现方案
这应该是最常用的写法,利用Oracle自带的CONNECT BY语法就能轻松实现:
SELECT SUBSTR('hello', LEVEL, 1) AS single_char FROM dual CONNECT BY LEVEL <= LENGTH('hello');
简单解释:
SUBSTR('hello', LEVEL, 1):LEVEL是CONNECT BY生成的递增值(从1开始),每次截取字符串对应位置的1个字符CONNECT BY LEVEL <= LENGTH('hello'):控制循环次数刚好等于字符串的长度,确保每个字符都被取到- 执行后会输出预期结果:
h
e
l
l
o
PostgreSQL 实现方案
PostgreSQL可以用generate_series生成序列来配合字符串截取:
SELECT SUBSTRING('hello' FROM n FOR 1) AS single_char FROM generate_series(1, LENGTH('hello')) AS n;
说明:
generate_series(1, LENGTH('hello')):生成从1到字符串长度的数字序列,相当于给每个字符分配一个位置编号SUBSTRING('hello' FROM n FOR 1):根据编号n截取对应位置的单个字符
MySQL 实现方案
MySQL可以用递归CTE(公共表表达式)来实现:
WITH RECURSIVE chars AS ( SELECT 1 AS pos, SUBSTRING('hello', 1, 1) AS single_char UNION ALL SELECT pos + 1, SUBSTRING('hello', pos + 1, 1) FROM chars WHERE pos < LENGTH('hello') ) SELECT single_char FROM chars;
逻辑说明:
- 先初始化递归的起点:取字符串第1位的字符
- 然后每次递归把位置
pos加1,截取对应位置的字符,直到位置等于字符串长度时停止递归
内容的提问来源于stack exchange,提问作者Raambabu
相关产品推荐
相关产品推荐

