Подтвердить что ты не робот

Настройка SQL Server 2008: переменная DateTime

У меня немного странная ситуация на экземпляре SQL Server 2008, который я принял.

Насколько я могу сказать, что он делает странные вещи с DateTime, по крайней мере, он не делает то, что я ожидал! Кажется, я не хочу, чтобы я задавал переменные DateTime, независимо от того, какой формат даты я использую.

Когда я выполняю:

DECLARE @Test AS DATETIME
SET @Test = 2011-02-15
PRINT @Test

Я получаю вывод:

Jun 18 1905 12:00AM

Я немного TSQL noob, так что извините, если это что-то простое, но это заставило меня замолчать! Я уверен, что мне не хватает чего-то действительно очевидного...

Я проверил все региональные настройки, которые я могу найти, и все это выглядит нормально. Я также попытался установить DateTime на различные литературные альтернативы, такие как '15/02/2011 ',' 2011-02-15 00:00:00 'и т.д. И т.д.

Я хотел бы узнать больше об этом, поэтому, пожалуйста, разместите любые ссылки, которые, по вашему мнению, могут быть полезны вместе с вашими ответами:)

Спасибо

4b9b3361

Ответ 1

В кавычках необходимо указать значение времени даты:

DECLARE @Test AS DATETIME 

SET @Test = '2011-02-15'

PRINT @Test

Ответ 2

Прежде всего - используйте одинарные кавычки вокруг ваших литературных дат!

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

Формат ISO-8601:

  • YYYYMMDD только для дат (например, 20110825 для 25 августа 2011 г.)
  • YYYY-MM-DDTHH:MM:SS для дат и времени (например, 2011-08-25T14:15:00 для 25 августа, 14: 15/2: 15 вечера после полудня).

Ответ 3

Попробуйте использовать Select вместо Print

DECLARE @Test AS DATETIME 

SET @Test = '2011-02-15'

Select @Test

Ответ 4

2011-01-15= 2011-16= 1995. Затем это неявно преобразуется из целого числа в дату, давая вам 1995-й день, начиная с 1 января 1900 года.

Вам нужно использовать SET @test = '2011-02-15'

Ответ 5

Просто для объяснения:

2011-02-15 интерпретируется буквально как математическая операция, на которую отвечает 1994.

Таким образом, это интерпретируется как 1994 дней с момента начала (1 января 1900 года).

1994 дней = 5 лет, 6 месяцев, 18 дней = 18 июня 1905 года

Итак, если вы не хотите вычислять каждый раз, когда хотите сравнить дату с конкретным значением, используйте стандарт: сравните значение функции toString() объекта даты со следующей строкой:

set @TEST  ='2011-02-05'

Ответ 6

Вы должны попробовать таким образом:

  DECLARE @TEST DATE
  SET @TEST =  '05/09/2013'
  PRINT @TEST

Ответ 7

 1. I create new Date() and convert her in String .
 2. This string I set in insert.

 **Example:**  insert into newDate(date_create) VALUES (?)";

 ...
 PreparedStatement ps = con.prepareStatement(CREATE))
        ps.setString(1, getData());
        ps.executeUpdate();
  ...}

   private String getData() {
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-M-dd hh:mm:ss");
     return  sdf.format(new java.util.Date());
    }

 **It is very important format** = "yyyy-M-dd hh:mm:ss"