내가 열 테이블의 이름이 :수직 출력
select LASTNAME
FROM dbo.Employees
WHERE LASTNAME = 'Smith'
및 위의 쿼리의 출력은
LASTNAME
Smith
내가 원하는이다의 작은 도움으로
LASTNAME
S
m
i
t
h
내가 열 테이블의 이름이 :수직 출력
select LASTNAME
FROM dbo.Employees
WHERE LASTNAME = 'Smith'
및 위의 쿼리의 출력은
LASTNAME
Smith
내가 원하는이다의 작은 도움으로
LASTNAME
S
m
i
t
h
같은 출력 a numbers table.
SQL 서버 :
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
오라클 : 당신은 숫자의 테이블이없는 경우
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 서버에서
----- 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 @[email protected]+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>[email protected]
BEGIN
INSERT INTO @Finalname
Select strval from [dbo].[SPLIT_test] ((SELECT name FROM @name where [email protected])) WHERE strval<>''-- removing empty spaces
SET @[email protected]+1
END
SELECT * FROM @Finalname
, 다음 사용할 수 있습니다 CTE로 목록 생성 :
;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;