Необходимо "построить" поле даты и времени из отдельного поля ЧЧММ - PullRequest
0 голосов
/ 28 марта 2011

Я работаю со структурой базы данных, которую я не могу изменить - в среде SQL Server 2005.Есть два поля - полное поле даты и времени и поле ЧЧММ.

Приложение не всегда заполняет оба поля, поэтому мне нужно создать полное поле даты и времени.Если часть часа-минуты-секунды поля даты и времени равна нулю, то мне нужно создать полную дату-время из части даты поля даты и времени, часа поля ЧЧММ, минуты ЧЧММполе и ноль секунд.

Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 28 марта 2011

Это обновляет все значения даты и времени, которые не имеют временных частей, с временными частями от HHMM:

UPDATE atable
SET DateTime = DateTime + STUFF(HHMM, 3, 0, ':')
WHERE DateTime = DATEADD(day, DATEDIFF(day, 0, DateTime), 0)

Предполагается, что столбец HHMM является строкой фиксированного формата, т. Е. У вас всегда есть 2-значные часы и 2-значные минуты в формате ЧЧММ, например, '1400' или '0825'. Запрос вставляет : между частями времени и добавляет полученное время (представленное в виде строки) к значению столбца даты-времени.


Если ЧЧММ является целым числом, ему может не хватать начального нуля или нулей для таких времен, как 08:00 или 00:05 (которые будут сохранены соответственно как 800 и 5). Итак, перед вставкой двоеточия нам нужно привести значение в строку, отформатированную как HHMM, например как это:

RIGHT(10000 + HHMM, 4)

Теперь мы можем передать это выражение вышеупомянутому запросу:

UPDATE atable
SET DateTime = DateTime + STUFF(RIGHT(10000 + HHMM, 4), 3, 0, ':')
WHERE DateTime = DATEADD(day, DATEDIFF(day, 0, DateTime), 0)
0 голосов
/ 28 марта 2011

Cythia:

Какой язык программирования вы используете?Возможно, вы захотите поискать функцию типа createDate () или createDateTime (), которая обычно принимает строковые входные данные и маску формата.Вы, вероятно, также будете иметь функции, такие как Now () и Today (), которые будут генерировать переменную времени на основе текущего времени.Если язык, который вы используете, строго типизирован, вам, возможно, придется использовать такую ​​функцию, как ConvertToString () или AsString ().Конечно, все эти имена функций будут сильно отличаться от языка к языку.

Итак, здесь есть шаг за шагом 1. Получите исходную переменную dateTime 2. Создайте новую переменную даты (т.е. MYDATE),и установите его с помощью DateFormatFunction (), который возвращает только дату в формате, который вы хотите указать маской (т. е. MM / DD / YYYY). 3. Создайте новую переменную времени (т. е. MYTIME), и она с помощью TimeFormatFunction (), котораявозвращает только дату в формате, который вы хотите указать маской (то есть ЧЧ: ММ: СС). 4. Проверьте, не является ли MYTIME 00:00:00.5. Если это так, создайте новую переменную времени (например, MYTIMENOW) и установите для нее текущее время, используя что-то вроде Now («ЧЧ: ММ: СС»), используя соответствующую маску.6. Теперь, в зависимости от того, в каком формате находится дата в MS SQL, вам нужно построить правильно отформатированную дату, создав новую переменную DateTime (т.е. MYDATETIME) и создать ее с помощью функции CreateDateTime («MYDATE MYTIME»), которая позволяет вамзамаскируйте это соответственно.7. Вставьте получившуюся переменную MYDATETIME в свою базу данных.

Если вы дадите мне знать свой язык, я могу рассказать вам некоторые предостережения, поскольку при работе с датой / временем всегда есть «ошибки»через платформы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...