Как установить переменную DateTime в SQL Server 2008? - PullRequest
25 голосов
/ 25 августа 2011

SQL Server 2008 не делает то, что я ожидал с DateTime. Он не позволяет мне устанавливать DateTime переменные, независимо от того, какой формат даты я использую.

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

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

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

Jun 18 1905 12:00AM

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

Ответы [ 7 ]

33 голосов
/ 25 августа 2011

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

DECLARE @Test AS DATETIME 

SET @Test = '2011-02-15'

PRINT @Test
14 голосов
/ 25 августа 2011

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

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

Формат ISO-8601 : либо

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

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

DECLARE @Test AS DATETIME 

SET @Test = '2011-02-15'

Select @Test
6 голосов
/ 25 августа 2011

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

Вам необходимо использовать SET @test = '2011-02-15'

4 голосов
/ 26 октября 2016

Просто объясню:

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

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

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

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

set @TEST  ='2011-02-05'
1 голос
/ 20 октября 2015
 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"
1 голос
/ 05 сентября 2013

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

  DECLARE @TEST DATE
  SET @TEST =  '05/09/2013'
  PRINT @TEST
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...