Ric*_*lda 92 sql-server stored-procedures
我需要将int datafield转换为带有前导零的nvarchar
例:
1转换为'001'
867转换为'000867'等
谢谢.
这是我4小时后的回复......
我测试了这个T-SQL脚本,对我来说工作正常!
DECLARE @number1 INT, @number2 INT
SET @number1 = 1
SET @number2 = 867
SELECT RIGHT('000' + CAST(@number1 AS NCHAR(3)), 3 ) AS NUMBER_CONVERTED
SELECT RIGHT('000000' + CAST(@number2 AS NCHAR(6)), 6 ) AS NUMBER_CONVERTED
Run Code Online (Sandbox Code Playgroud)
我创建了这个用户功能
T-SQL代码:
CREATE FUNCTION CIntToChar(@intVal BIGINT, @intLen Int) RETURNS nvarchar(20)
AS
BEGIN
-- BIGINT = 2^63-1 (9,223,372,036,854,775,807) Max size number
-- @intlen contains the string size to return
IF @intlen > 20
SET @intlen = 20
RETURN REPLICATE('0',@intLen-LEN(RTRIM(CONVERT(nvarchar(20),@intVal))))
+ CONVERT(nvarchar(20),@intVal)
END
Run Code Online (Sandbox Code Playgroud)
示例:
SELECT dbo.CIntToChar(867,6)AS COD_ID
OUTPUT
000867
小智 89
试试这个: select right('00000' + cast(Your_Field as varchar(5)), 5)
它会得到5位数的结果,例如:00001,....,01234
小智 54
您还可以使用SQL Server 2012中引入的FORMAT()函数. http://technet.microsoft.com/library/hh213505.aspx
DECLARE @number1 INT, @number2 INT
SET @number1 = 1
SET @number2 = 867
SELECT FORMAT(@number1, 'd10')
SELECT FORMAT(@number2, 'd10')
Run Code Online (Sandbox Code Playgroud)
KM.*_*KM. 21
使用,REPLICATE所以您不必硬编码所有前导零:
DECLARE @InputStr int
,@Size int
SELECT @InputStr=123
,@Size=10
PRINT REPLICATE('0',@Size-LEN(RTRIM(CONVERT(varchar(8000),@InputStr)))) + CONVERT(varchar(8000),@InputStr)
Run Code Online (Sandbox Code Playgroud)
OUTPUT:
0000000123
Run Code Online (Sandbox Code Playgroud)
Gol*_*hop 13
不是高杰克这个问题,但需要注意你需要使用(N)VARCHAR而不是(N)CHAR数据类型.
RIGHT('000' + CAST(@number1 AS NCHAR(3)), 3 )
Run Code Online (Sandbox Code Playgroud)
上面的段,将不会从SQL 2005产生正确的响应
RIGHT('000' + CAST(@number1 AS NVARCHAR(3)), 3 )
Run Code Online (Sandbox Code Playgroud)
上面的段,将从SQL 2005产生所需的响应
varchar将为您提供所需的前缀长度.固定长度数据类型需要长度指定和调整的地方.
数据类型“int”不能超过10位,另外“Len()”函数对int起作用,所以在调用len()函数之前不需要将int转换为字符串。
最后,您没有考虑 int 的大小 > 您希望填充到的总位数 (@intLen) 的情况。
因此,更简洁/正确的解决方案是:
CREATE FUNCTION rf_f_CIntToChar(@intVal Int, @intLen Int) RETURNS nvarchar(10)
AS
BEGIN
IF @intlen > 20 SET @intlen = 20
IF @intlen < LEN(@intVal) RETURN RIGHT(CONVERT(nvarchar(10), @intVal), @intlen)
RETURN REPLICATE('0', @intLen - LEN(@intVal)) + CONVERT(nvarchar(10), @intVal)
END
Run Code Online (Sandbox Code Playgroud)
小智 5
我喜欢用
DECLARE @Length int
DECLARE @Number int
SET @Length = 9
SET @Number = 4
select right( POWER(10, @Length) + @Number, @Length)
Run Code Online (Sandbox Code Playgroud)
这给了我
000000004
Run Code Online (Sandbox Code Playgroud)
小智 5
不是很优雅,但我添加了一个与我想要转换的数字相同数量的前导零的设置值,并使用 RIGHT 函数。
例子:
SELECT RIGHT(CONVERT(CHAR(7),1000000 + @number2),6)
Run Code Online (Sandbox Code Playgroud)
结果:'000867'
| 归档时间: |
|
| 查看次数: |
198022 次 |
| 最近记录: |