SQL Server підтримує багато форматів - дивіться книги MSDN Online Online на CAST та CONVERT . Більшість цих форматів залежать від налаштувань у вас, тому ці налаштування можуть працювати декілька разів, а іноді й ні.
Спосіб вирішення цього питання полягає у використанні (трохи адаптованого) формату дати ISO-8601, який підтримується SQL Server - цей формат працює завжди - незалежно від мови вашого SQL Server та налаштувань формату дати.
Формат ISO-8601 підтримується програмою SQL Server у двох варіантах:
YYYYMMDD
лише за дати (без часової частини); зверніть увагу тут: ніяких тире! , це дуже важливо! YYYY-MM-DD
це НЕ залежить від налаштувань DateFormat в вашому SQL Server і НЕ працювати в будь-яких ситуаціях!
або:
YYYY-MM-DDTHH:MM:SS
для дат та часу - зверніть увагу: у цьому форматі є тире (але їх можна опустити) та фіксований T
як роздільник між частиною дати та часу DATETIME
.
Це справедливо для SQL Server 2000 та новіших версій.
Тож у вашому конкретному випадку використовуйте ці рядки:
insert into table1 values('2012-02-21T18:10:00', '2012-01-01T00:00:00');
і вам повинно бути добре (зверніть увагу: для цього вам потрібно використовувати міжнародний 24-годинний формат, а не 12-годинний формат AM / PM).
Як варіант : якщо ви перебуваєте на SQL Server 2008 або новіших версіях, ви також можете використовувати DATETIME2
тип даних (замість звичайного DATETIME
), і ваш поточний INSERT
працював би просто без проблем! :-) DATETIME2
набагато краще і набагато менш вибагливий до конверсій - і рекомендується типи даних про дату / час для SQL Server 2008 чи новіших.
SELECT
CAST('02-21-2012 6:10:00 PM' AS DATETIME2), -- works just fine
CAST('01-01-2012 12:00:00 AM' AS DATETIME2) -- works just fine
Не запитуйте мене, чому вся ця тема настільки хитра і дещо заплутана - це просто так. Але з YYYYMMDD
форматом ви повинні добре відповідати будь-якій версії SQL Server, а також будь-яким налаштуванням мови та дати у вашому SQL Server.