2013-09-03 1 views
0

У меня есть хранимая процедура, которая имеет параметры OrderID (bigint) и ApprovalDateTime (varchar(25))Сохранение даты и времени в столбце XML - формат XML против SQL Format

СП просто обновляет столбец XML называется UserDef с следующий XML для данного OrderID:

<UserDef> 
<ApprovalDateTime>01/01/2013 13:30:30</ApprovalDateTime> 
</UserDef> 

Мой вопрос, при сохранении значения времени даты, как это в столбце XML, какой формат лучше всего?

  1. ИСО 8601 формат XML как 2002-05-30T09:00:00
  2. строку типа 01/01/2013 13:30:30 или
  3. неразделенные формат как 20130101 13:30:30
  4. или любой другой формат

Какой бы вы порекомендовали?

Эта дата будет извлечена в другой хранимой процедуре для представления в столбце отчета SSRS.

+4

Как насчет вырезать XML и использовать дата-время? – billinkc

+4

Почему бы просто не сохранить фактическое значение 'DateTime' в фактическом столбце' DateTime'? Вы всегда можете добавить XML fluff позже, а не беспокоиться о формате в базе данных. База данных должна хранить * данные *; клиент - это единственный слой, который должен знать или заботиться о * форматировании *. –

+1

Почему бы не использовать формат презентации для отчета? Я предлагаю вам сделать параметр ApprovedDateTime значением datetime вместо varchar. –

ответ

2

Мое первое предложение - исправить тип данных. Нет абсолютно никакой причины, по которой я могу понять, что это единственное значение должно храниться со всем этим дополнительным XML-пухом вокруг него. Оставьте материал презентации на уровне презентации.

Учитывая, что на данный момент вы, похоже, застряли, я бы использовал ISO 8601 (первый вариант). Зачем?

  1. Использование mm/dd/yyyy (ваш вариант 2) склонен к неправильному толкованию различными способами, например, если у вас 05/06/2013, как я буду знать, если это 6 мая или 5 июня? Будет ли ваша аудитория такой же формат даты, какой вы выбрали? Вы даже знаете? На самом деле, чтобы определить, почему это проблема, я даже не знаю, имел ли смысл mm/dd/yyyy или dd/mm/yyyy.

  2. Неразделенный формат немного более громоздкий для чтения, особенно если у вас есть даты с последовательными символами, например. 20110110. Пунктиром может быть отличным визуальным разделителем, просто никогда не забыть Т: (! 5-июня)

    SET LANGUAGE FRENCH; 
    SELECT CONVERT(DATETIME, '2013-05-06 13:30:30'); 
    

    Результат:

    2013-06-05 
    
Смежные вопросы