2015-07-04 7 views
2

Я использую SQL Server 2008 R2.Использование времени (0) и Datetime2 (0) в SQL Server

Используя SQL Server Management Studio, я создал базу данных и новую таблицу.

В таблице у меня есть 2 столбца с типами данных Time(0) и Datetime2(0).

enter image description here

Я вставил запись в таблице со значениями:

12:50:34...........2015-02-02 12:50:34 

Но когда эта запись будет сохранена, значения, как показано ниже:

12:50:34...........2015-02-02 12:50:34.0000000 

Это изображение внутри SQl Студия управления сервером: enter image description here

Значения столбца Time(0) остаются такими, как я набрал. Но значение столбца Datetime2(0) имеет те 0 в конце.

Почему значение DateTime2(0) меняется?

+0

Это может быть ошибка в SSMS. Если вы выполняете 'SELECT * FRON tab', он должен возвращать' DATETIME2 (0) 'без наносекунд:' 2015-02-02- 12: 50: 34'. –

+0

Хорошо, но что правильно: запрос или SSMS? И почему ? – alex

ответ

0

Datetime2(0) означает, что дробная точность 0.

Я думаю, когда SQL Server хранит дату в типе datetime2 то читал, что данные, считает, что он имеет datetime2 с 7 точность для миллисекунды после обрезаются его n или 0 в этом случае:

Для пример:

DECLARE @d1 datetime2 = CAST('1968-10-23 12:45:37.1237' AS datetime2(0)) 
     @d2 datetime(0) = '1968-10-23 12:45:37.1237'; 

SELECT @d1, @d2; 

результат будет

1968-10-23 12:45:37.0000000  1968-10-23 12:45:37 

Это (результат) одинаков для time(0):

DECLARE @t1 time = CAST('1968-10-23 12:45:37.1237' AS datetime2(0)), 
    @t2 time(0) = '1968-10-23 12:45:37.1237'; 

SELECT @t1, @t2 

Таким образом, когда вы используете datetime(0) и time(0) как тип ваших колонок поведение такое же:

DECLARE @t table(dt2 datetime2(0), t time(0)); 

INSERT INTO @t VALUES ('1968-10-23 12:45:37.1237', '1968-10-23 12:45:37.1237'); 

SELECT * FROM @t; 

результат:

dt2     t 
1968-10-23 12:45:37 12:45:37 
+0

Мой вопрос в том, почему в случае Time (0) дополнительные 0 в конце не добавляются, но в DateTime2 (0) эти 0 ate end остаются? У меня есть случай, когда время на оба значения не имеет миллисекунд. – alex

+0

@alex, когда я тестирую и добавляю к результату ответа 'time (0)' и 'datetime2 (0)' такие же и без каких-либо завершающих '0' ;;). –

+0

@ shA.t Пожалуйста, посмотрите изображение на моем обновленном вопросе. Это изображение было сгенерировано с помощью: Edit top 200 Rows. – alex

Смежные вопросы