首页 > 解决方案 > 使用 while 循环遍历列(字符串)并连接 0

问题描述

我在 TSQL 中做了以下脚本/查询(我碰巧是个初学者):

USE HIS_WEB
GO
DECLARE @NSS_LENGTH AS INT, @NSS AS VARCHAR(30)
SET @NSS_LENGTH = LEN((SELECT Folio FROM DBO.Pacientes WHERE IdPaciente=1003))
SET @NSS = (SELECT Folio FROM DBO.Pacientes WHERE IdPaciente=1003)
WHILE (@NSS_LENGTH < 18)
BEGIN
    SET @NSS = @NSS + '0' 
    SET @NSS_LENGTH = @NSS_LENGTH + 1
    --PRINT @NSS
END
SELECT @NSS AS NSS_AUTOFILL

SELECT Folio,* FROM DBO.Pacientes WHERE IdPaciente=1003

这就是我得到的: 在此处输入图像描述

它做了应该做的事情,但它有一个市长缺陷。while循环遍历单个值。我想要的是它遍历一列字符串值并将 0 连接起来,直到 while 循环变为 false。

像这样: 在此处输入图像描述

@NSS变量只能存储一个值。我认为这是主要问题所在。我可以在一个变量中存储多个值吗?作为记录,我尝试过并得到以下错误'子查询返回超过 1 个值。当子查询跟随 =、!=、<、<=、>、>= 或当子查询用作表达式时,这是不允许的。

我不知道这是否有任何帮助,但我完成了同样的任务PYTHON并成功了。

NSS = ['9413880090','97845687','94138800901M1988','5218']
for i in NSS:
    x = len(i)
    while x < 18:
        i += '0'
        x += 1
    print(i)

在此处输入图像描述

我希望我的 TSQL 代码的行为类似于我的 python 脚本。这是可能的还是我需要以不同的方式(光标)解决这个问题?

注意:我不想使用UPDATE语句来更新我的字符串值。我只想在结果集中完成连接。提前致谢。

标签: sql-servertsql

解决方案


select  nss_autofill = left(Folio + replicate('0', 18), 18),
        -- rest of your columns here...
from    dbo.Pacientes

replicate()功能按照它在锡上所说的做。给定某个varchar值作为参数 1,aint作为参数 2,它会创建一个新varchar值,该值是 arg1 重复 arg2 次。

Left然后将 varchar 作为第一个参数,并返回前 N 个字符,其中 N 是第二个参数。


推荐阅读