有人可以解释这种情况吗,因为我弄错了时间数据,例如:我预计 sch 出发时间为 15.10,但我得到的是 15.01
[Sch Dep Time] = IIF(DATEPART(Hour,[Journey and Details.schdeptime]) < 10 AND DATEPART(Minute,[Journey and Details.schdeptime]) < 10,
('0' + DATEPART(Hour,[Journey and Details.schdeptime]) + ':0' + DATEPART(Minute,[Journey and Details.schdeptime])),
IIF(DATEPART(Hour,[Journey and Details.schdeptime]) < 10,
('0' + DATEPART(Hour,[Journey and Details.schdeptime]) + ':' + DATEPART(Minute,[Journey and Details.schdeptime])),
(DATEPART(Hour,[Journey and Details.schdeptime]) + ':0' + DATEPART(Minute,[Journey and Details.schdeptime]))))
更新
我突然想到,[Sch Dep Time]
应该包含存储在[Journey and Details.schdeptime]
中的dataTime
值的时间分量,以分钟分辨率。为此,您无需弄乱特定的日期部分和字符串连接,您所要做的就是使用convert
:
[Sch Dep Time] = CONVERT(char(5), [Journey and Details.schdeptime], 108)
108 样式返回hh:mm:ss
(24 小时(,通过使用char(5)
,您只需获取该字符串的前 5 个字符 -hh:mm
。
第一个版本
你的事情太复杂了。尝试改用旧的right('00' + val, 2)
技巧:
[Sch Dep Time] = RIGHT('00' + CAST(DATEPART(Hour,[Journey and Details.schdeptime]) AS VARCHAR(2)), 2) + ':' +
RIGHT('00' + CAST(DATEPART(Minute,[Journey and Details.schdeptime]) AS VARCHAR(2)), 2)
解释:
首先将前导零连接到所需的字符串。
假设您有一个字符串,表示必须始终包含 4 位数字的数字,但它可能是 1234 或 0003 - 因此您首先执行'0000' + @YourNumber
。
然后,您使用RIGHT
修剪掉任何不需要的零 - 假设您现在有000023
,但您想要0023
- 您确实RIGHT('000023', 4)
获得最后 4 个字符。