IIF条件查询

时间:2018-09-25 06:31:47

标签: tsql business-intelligence

有人可以解释这种情况,因为我输入了错误的时间数据,例如:我预计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]))))

1 个答案:

答案 0 :(得分:0)

更新

我突然想到[Sch Dep Time]应该以分钟的分辨率包含dataTime中存储的[Journey and Details.schdeptime]值的时间分量。为此,您无需弄乱特定的日期部分和字符串连接,只需使用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个字符。