首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >垂直输出

垂直输出
EN

Stack Overflow用户
提问于 2012-10-13 00:44:03
回答 3查看 2.2K关注 0票数 0

我在表中有列名:

代码语言:javascript
运行
复制
select LASTNAME
  FROM dbo.Employees
 WHERE LASTNAME = 'Smith'

上述查询的输出为

代码语言:javascript
运行
复制
LASTNAME
Smith

我想要这样的输出

代码语言:javascript
运行
复制
   LASTNAME
      S
      m
      i
      t
      h
EN

回答 3

Stack Overflow用户

发布于 2012-10-13 01:06:53

numbers table的帮助下。

SQL Server:

代码语言:javascript
运行
复制
select substring(E.LASTNAME, N.N, 1) as LASTNAME
from Employees as E
  inner join Numbers as N
    on N.N between 1 and len(E.LASTNAME)
order by E.LASTNAME, N.N

Oracle:

代码语言:javascript
运行
复制
select substr(E.LASTNAME, N.N, 1) as LASTNAME
from Employees E
  inner join Numbers N
    on N.N between 1 and length(E.LASTNAME)
order by E.LASTNAME, N.N;

SQL Fiddle

票数 2
EN

Stack Overflow用户

发布于 2012-10-13 05:13:25

在SQL Server中,如果您没有数字表,则可以使用CTE生成列表:

代码语言:javascript
运行
复制
;with cte (id, start, numb) as
(
  select id, 1 start, len(lastname) numb
  from employees
  union all
  select id, start + 1, numb
  from cte
  where start < numb
)
select c.id, substring(e.lastname, c.start, 1)
from employees e
inner join cte c
  on c.start between 1 and len(e.lastname)
  and c.id = e.id
order by e.id, e.lastname;

请参阅SQL Fiddle With Demo

票数 1
EN

Stack Overflow用户

发布于 2012-10-13 01:49:24

代码语言:javascript
运行
复制
-----  function for splitting   
CREATE FUNCTION [dbo].[SPLIT_Test] (  
@string VARCHAR(8000) )  
 RETURNS @table TABLE (strval VARCHAR(8000))  
AS  
BEGIN  
IF  LEN(@string)>=1
BEGIN
DECLARE @fulllen int=LEN(@string),@lastlen int=0
WHILE @fulllen>@lastlen
BEGIN
INSERT INTO @table
SELECT SUBSTRING(@string,1,1)
SET @string= RIGHT(@String, LEN(@String) - 1)
SET @lastlen=@lastlen+1
END
 RETURN 
END
RETURN   
END

---- query 
GO
DECLARE @name table(name varchar(500),row int IDENTITY(1,1))
INSERT INTO @name
select LASTNAME
  FROM dbo.Employees
 WHERE LASTNAME = 'Smith'
 DECLARE @Finalname table(name varchar(50))
DECLARE @startrow int =(SELECT MAX(row) FROM @name)
,@endrow int =1
WHILE  @startrow>=@endrow
BEGIN
INSERT INTO @Finalname
Select strval from [dbo].[SPLIT_test] ((SELECT name FROM @name where row=@endrow))         WHERE strval<>''-- removing empty spaces
SET @endrow=@endrow+1
END
SELECT * FROM @Finalname
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12863579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档