首页 > 解决方案 > 如何在sql server中将名称划分为行?

问题描述

我希望将名称作为参数传递给存储过程,当我执行此存储过程时,它应该将名称分成行。例如,如果通过“彼得”,输出应该是

彼得
_
_
_
_

标签: sqlsql-servertsql

解决方案


最快的方法是使用 Tally 和SUBSTRING. 我假设该名称不会超过 100 个字符,并且(因为它是一个名称)它是一个nvarchar而不是一个varchar. 然后,您可以执行以下操作:

DECLARE @Name nvarchar(100) = N'Peter';

WITH N AS(
    SELECT N
    FROM (VALUES(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL))N(N)),
Tally AS(
    SELECT TOP(DATALENGTH(@Name) / 2) --If a varchar, remove the / 2
           ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS I
    FROM N N1, N N2)
SELECT SUBSTRING(@Name,T.I,1) AS C
FROM Tally T;

推荐阅读