IIF Состояние вопросов - PullRequest
       8

IIF Состояние вопросов

0 голосов
/ 25 сентября 2018

Может кто-нибудь объяснить это условие, потому что я получаю неправильные данные о времени, например: я ожидаю, что время вылета будет равно 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 голосов
/ 25 сентября 2018

Обновление

Мне вдруг пришло в голову, что [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 символа.

...