【发布时间】:2019-07-10 23:02:04
【问题描述】:
我目前在使用 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 不接受前导零
【问题讨论】:
-
我很困惑。您正在谈论填充数字,然后您在代码中使用日期/时间。然后你引入时间值。你真正想做什么?样本数据和期望的结果真的很有帮助!
-
您的实际输入的数据类型是什么——文本还是数字?您使用的是数字,但如果您有“前导零”,则输入应该是文本。
SELECT CONVERT(DATETIME,STUFF(STUFF('08022019',5,0,'/'),3,0,'/') , 103)工作得很好。 -
@JeroenMostert 道歉我会改变它,因为它是数字,那是我的错。我将在主要部分更改它
-
@GordonLinoff 对此表示歉意,它是客户想要的数字字段输入,我正试图将其设置为一个日期作为其会计日期,如上例所示。我需要输出为:2019-03-11 00:00:00.000
-
@JeroenMostert 还要强调如果我们是文本,我认为“8032019”示例不适用于我当前的方法。也许可能需要要求客户让他们的数据更“干净”
标签: sql sql-server