【发布时间】:2021-06-07 12:23:22
【问题描述】:
我试图用零填充@myid,但零没有出现。结果应采用这种格式(SC000290、SC000291 等)。显示的是 SC290。谁能告诉我这是怎么做到的?
declare @myid int;
select @myid = 290
SELECT CONCAT('SC', FORMAT(@myid, '000000') + ROW_NUMBER() OVER(order by (select NULL))) as myid
FROM Table
【问题讨论】:
-
我可以看到该查询中没有
bigints。唯一存在隐式 covnerion 的地方是FORMAT和ROW_NUMBER,FORMAT返回varchar,ROW_NUMBER和int。FORMAT也完全没有意义,因为该值将被隐式转换为int,删除所有前导零。 -
这里有答案吗,还是你只是给出解释?
-
那里没有答案,因为您提供的代码不会产生那个错误,@FirstElement。 db<>fiddle 花时间发布minimal reproducible example。
-
事实上,上面的代码会因为错误而失败 "'FORMAT' is not a known built-in function name."
FORMAT在 SQL Server 2012 中引入,并且您使用的是 SQL Server 2008(顺便说一下,它现在完全不受支持 18~ 个月,所以很久以前就可以对升级路径进行排序了)。 -
你应该阅读data type precedence。它解释了为什么将字符串与
int(FORMAT(@myid, '000000') + ROW_NUMBER()) 组合会导致int。
标签: sql tsql sql-server-2008