Изменить формат даты по умолчанию, хранящийся в базе данных - PullRequest
0 голосов
/ 17 января 2011

Я вижу, что мои даты хранятся в базе данных в этом формате для столбца (тип данных datetime). 2011-01-14 10: 15: 41.787 т.е. Как я могу сделать хранилище по умолчанию в формате ГГГГ-ДД-ММ. Мне нужно установить это для всех DBS, или я могу установить это для одной DB и как?

Ответы [ 2 ]

4 голосов
/ 17 января 2011

У меня есть столбец в типе datetime, сейчас он сохраняется как 2011-01-14 10: 15: 41.787, мой вопрос: как мне установить базу данных, чтобы хранить ее как 2011-14-01 10: 15: 41.787

В этом суть путаницы. То, что SQL Server Management Studio отображает столбец даты и времени в этом формате, не означает, что он хранится в формате AS YEXY-MM-DD чч: мм: сс.ззз. Он хранится в двоичном виде, что-то вроде 0000101000001010 ..

Ваши даты хранятся в SQL Server в виде последовательности байтов (в действительности, битов), которые составляют некоторое числовое значение, которое является смещением от 1900-01-01. Не существует встроенного формата дат. Вы имеете в виду, что SSMS по умолчанию отображает [отображать] столбцы даты и времени в виде ГГГГ-ММ-ДД чч: мм: ss.zzz. Если вы используете интерфейсный инструмент программирования, это также может привести к формату [display] по умолчанию, если вы не запросили другой.

Нет абсолютно никакого способа заставить SSMS показывать данные даты и времени в другом формате с помощью опций или конфигурации. При необходимости вам придется обновить запрос SQL, чтобы преобразовать столбец datetime в столбец VARCHAR, содержащий эквивалент TEXTual в определенном формате. Это может быть полезно в SSMS, но было бы плохо при использовании в качестве источника данных для интерфейсных графических интерфейсов / веб-приложений - поскольку значения не относятся к дате и времени и не могут использоваться для вычисления интервала, построения графиков, привязки к элементам управления датами и т. Д. *

Смотрите этот пример отображения времени (getdate ()) как YYYY-DD-MM, очень необычный формат. Обратите внимание, что поле даты / переменная должны использоваться дважды:

select stuff(convert(char(7), getdate(), 120), 5, 0, '-' + convert(char(2), getdate(), 3))
2 голосов
/ 17 января 2011

DATETIME хранятся внутри как два 4-байтовых целых числа, поэтому, во-первых, вы видите отформатированное представление для пользовательского интерфейса - на самом деле оно не сохраняется в определенном формате даты / времени как таковом.например, если вы вставите только дату, например "2010-01-01", тогда она все равно будет содержать элемент времени: 2010-01-01 00: 00: 00.000

Если вас интересует только часть DATEзатем вы можете отформатировать DATETIME для вывода либо в коде внешнего интерфейса, либо с помощью вашего запроса:

например

SELECT CONVERT(VARCHAR(8), GETDATE(), 121)

Так что даже если вставляемые вами DATE содержат время,игнорироваться при возвращении.Вы также можете убедиться, что вы вставляете только даты без указанного времени - вам нужно обрабатывать это в любом коде, который выполняет INSERT.например, из .NET вместо ввода DateTime.Now вы могли бы передать DateTime.Now.Date.

В SQL Server 2008 существует тип данных DATE, который предназначен для хранения только DATE (без времени), которыйдействительно то, что вы хотите в этом сценарии.

...