Ответ 1
В кавычках необходимо указать значение времени даты:
DECLARE @Test AS DATETIME
SET @Test = '2011-02-15'
PRINT @Test
У меня немного странная ситуация на экземпляре 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 'и т.д. И т.д.
Я хотел бы узнать больше об этом, поэтому, пожалуйста, разместите любые ссылки, которые, по вашему мнению, могут быть полезны вместе с вашими ответами:)
Спасибо
В кавычках необходимо указать значение времени даты:
DECLARE @Test AS DATETIME
SET @Test = '2011-02-15'
PRINT @Test
Прежде всего - используйте одинарные кавычки вокруг ваших литературных дат!
Во-вторых, я настоятельно рекомендую всегда использовать формат даты 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 вечера после полудня).Попробуйте использовать Select вместо Print
DECLARE @Test AS DATETIME
SET @Test = '2011-02-15'
Select @Test
2011-01-15
= 2011-16
= 1995
. Затем это неявно преобразуется из целого числа в дату, давая вам 1995-й день, начиная с 1 января 1900 года.
Вам нужно использовать SET @test = '2011-02-15'
Просто для объяснения:
2011-02-15
интерпретируется буквально как математическая операция, на которую отвечает 1994
.
Таким образом, это интерпретируется как 1994 дней с момента начала (1 января 1900 года).
1994 дней = 5 лет, 6 месяцев, 18 дней = 18 июня 1905 года
Итак, если вы не хотите вычислять каждый раз, когда хотите сравнить дату с конкретным значением, используйте стандарт: сравните значение функции toString()
объекта даты со следующей строкой:
set @TEST ='2011-02-05'
Вы должны попробовать таким образом:
DECLARE @TEST DATE
SET @TEST = '05/09/2013'
PRINT @TEST
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"