在使用ms sql server来打印出基于数字的列的前导零时,我目前遇到问题(客户端已采用这种方式设置)。它应该是一种日期类型,但客户已将其设置为数字,因此我正在使用变通方法。
该列的值例如为11032019可以,但是当该列的值为例如08032019或8032019时,确实会导致问题
我尝试使用正确的函数添加'00',但是使用mssqlserver却无济于事。
例如,像这样的东西:
SELECT
RIGHT('00'+CONVERT(DATETIME,STUFF(STUFF(13022018,5,0,'/'),3,0,'/') , 103),0)
CONVERT(DATETIME,STUFF(STUFF(11032019,5,0,'/'),3,0,'/') , 103)
上面的方法还行,但是问题出在下面,如果它的前导0或正好如下
CONVERT(DATETIME,STUFF(STUFF(8022019,5,0,'/'),3,0,'/') , 103)
我想我接近了我所需要的是它应该输出适用于2019-03-11 00:00:00.000的示例
但是对于不起作用的那个,它只是简单地引发了转换失败的错误,我已经对其进行了测试,因为前导零未被ms sql接受
答案 0 :(得分:1)
另一个使用left()
和right()
的选项。如果值是INT,这也适用。
示例
Declare @YourTable table (SomeCol varchar(25))
Insert Into @YourTable values
('11032019')
,('08032019')
,('8032019')
Select *
,NewValue = try_convert(date
,right(SomeCol,4)
+left(right('00'+SomeCol,8),4)
)
From @YourTable
返回
SomeCol NewValue
11032019 2019-11-03
08032019 2019-08-03
8032019 2019-08-03
编辑-丑陋更新
Declare @YourTable table (SomeCol int)
Insert Into @YourTable values
(11032019)
,(8032019)
,(80219)
Set DateFormat DMY
Select *
,NewValue = try_convert(date,
stuff(right('0'+left(SomeCol,len(SomeCol)-len(right(SomeCol,IIF(Len(SomeCol)<7,2,4)))),4),3,0,'/')
+ '/'
+ right(SomeCol,IIF(Len(SomeCol)<7,2,4))
)
From @YourTable
返回
SomeCol NewValue
11032019 2019-03-11
8032019 2019-03-08
80219 2019-02-08
答案 1 :(得分:0)
如果您想将数字填充到给定长度,并以前导零填充,那么一种方法是:
select right(concat(replicate('0', 10), 11032019), 10)
您也可以使用format()
:
format(11032019, '0000000000')
或:
format(11032019, 'D10')
答案 2 :(得分:0)
尝试添加100000000(8个零,也可以10个),转换为char并接受最后8个字符
select STUFF(STUFF(right(1000000000 + 8022019,8) ,5,0,'/'),3,0,'/')