Невозможно хранить определенные форматы даты и времени в SQL Server - PullRequest
0 голосов
/ 03 декабря 2011

На данный момент у меня есть столбец, который содержит метки времени как datetime

Данные хранятся как 10/30/2011 10:50:34 AM

Моя цель - преобразовать каждую дату в этой конкретной таблицебыть отформатирован как 30 Oct 2011 10:50:34

Проблема:

Когда я пытаюсь запустить этот SQL, он успешно обрабатывается.

UPDATE DatesTable 
SET DateTime = '30 Oct 2011 10:50:34' 
WHERE DateTime = '10/30/2011 10:50:34 AM'

Я заметил, что это было странно, поэтому, если я изменил SQL на:

UPDATE DatesTable 
SET DateTime = '31 Oct 2011 10:50:34' 
WHERE DateTime = '10/30/2011 10:50:34 AM'

Он обновляет поле даты и времени с правильной информацией о дне / времени, но сохраняет его в том же самом виде.format.

Я рассмотрел другие возможные типы данных даты для этого столбца, но, похоже, ничто не поддерживает эту дату.Я также сталкивался с этим SQL, но не уверен, что он может решить мою проблему.

SELECT CONVERT(datetime, datecolumnname, formattingparam) as tmp FROM tablename

Конвертирующая ссылка

Ответы [ 4 ]

3 голосов
/ 03 декабря 2011

SQL Server не хранит DateTime в любом формате строки - он хранится в виде 8-байтового числового значения.

Различные настройки (язык, формат даты) влияют только на DateTimeпоказано вам в SQL Server Management Studio - или как он анализируется при попытке преобразовать строку в DateTime.

SQL Server поддерживает множество форматов - см. Электронная книга MSDN по CAST и CONVERT .Большинство из этих форматов зависят от ваших настроек, поэтому эти настройки могут работать несколько раз, а иногда нет.

Чтобы решить эту проблему, используйте ISO-8601 формат даты , поддерживаемый SQL Server - этот формат работает всегда - независимо от вашего языка SQL Server и настроек формата даты.

Формат ISO-8601 поддерживается SQL Server в двух вариантах:

  • YYYYMMDD только для дат (без временной части) - обратите внимание: без черточек! , это очень важно!YYYY-MM-DD равно НЕ независимо от настроек формата даты в SQL Server и будет НЕ работать во всех ситуациях!

или:

  • YYYY-MM-DDTHH:MM:SS для дат и времени - обратите внимание, здесь: этот формат имеет тире.

Это действительно для SQL Server 2000 и новее.

Если вы используете SQL Server 2008 и тип данных DATE (только DATE - , а не DATETIME!), То вы также можете использовать формат YYYY-MM-DD, и это тоже будет работать,с любыми настройками в вашем SQL Server.

Не спрашивайте меня, почему вся эта тема такая хитрая и несколько запутанная - так оно и есть.Но с форматом YYYYMMDD вам подойдет любая версия SQL Server и любые настройки языка и даты в вашем SQL Server.

2 голосов
/ 03 декабря 2011

SQL сервер не хранит данные в текстовом формате. Хранится в виде числа.

Посетите эту страницу, чтобы узнать, как форматировать даты в sql. http://msdn.microsoft.com/en-us/library/ms187928.aspx

2 голосов
/ 03 декабря 2011

Данные хранятся независимо от формата.Вам нужно только переформатировать даты для отображения.

1 голос
/ 03 декабря 2011

Тип данных datetime сообщает ядру базы данных, как хранить данные внутри, чтобы вам не приходилось беспокоиться о представлении данных человеком.Вот почему ваши разные UPDATE скрипты не меняют формат.Формат применяется только при преобразовании из внутреннего хранилища базы данных (число, представляющее количество времени, прошедшего с определенной начальной точки) и удобочитаемой даты в требуемой культуре.Вам просто нужно отформатировать дату, когда она будет отображаться, в формате, подходящем для ваших пользователей.Например, для многих месяц / день / год не имеет смысла.

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