sql-server - 使用 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
语句来更新我的字符串值。我只想在结果集中完成连接。提前致谢。
解决方案
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 是第二个参数。
推荐阅读
- node.js - 将api上传到heroku后访问api时出错,但在本地工作正常
- r - dplyr 左侧的 bind_cols() 数据框
- npm - 如何在 WEBPACK 中使用 NPM 多平台名称(挂钩指定平台包)?
- tensorflow - 从 Pytorch 到 tensorflow gpytorch.models.ExactGP
- git - NPM 安装 (@react-navigation/bottom-tabs) 上的“无法从远程存储库读取”
- function - 如何使用带有 $@ 的 make 文件函数来生成先决条件?
- typescript - 如何使用 esbuild 将具有多个导出函数的单个 index.ts 文件编译成单独的已编译 javascript 文件
- python - 如何检测键后跟具有特定字符的值并将其从字符串中删除?
- javascript - Jquery - 克隆一个包含输入无序列表的 div。如何让下拉列表在克隆行中工作?
- json - 避免多次编写相同的函数