2014-08-28 2 views
0

У меня есть база данных SQL Server 2012 Express, установленная на сервере в Германии. Я создал базу данных и теперь понял, что форматы даты неверны. Мне нужно показать каждую дату как dd/mm/yyyy.Изменение формата даты в SQL Server 2012

Когда я бегу DBCC useroptions (после внесения некоторых изменений на сервер), я получаю следующее -

language  dateformat 
------------------------- 
British  dmy 

Когда я бегу select GetDate() в новом запросе, он показывает дату следующим образом -

2014-08-28 13:53:10.550 

вопрос Суть заключается в том, когда я вхожу 28/08/2014, чтобы текстовое поле на проект веб-форм, это ошибки

Строка не была признана действительной DateTime.

selP.StartDate = Convert.ToDateTime(tbStartDate.Text); 

Любые идеи, почему это происходит? Я создал нового пользователя с момента изменения настроек на британский и dmy, которые по-прежнему выдают ту же ошибку.

+0

Это проблема .net. Я добавил соответствующие теги. –

ответ

0

IN SQL, вам необходимо указать эту строку как DATETIME перед вставкой или обновлением базы данных.

CAST('28/08/2014' AS DATETIME) 

Вы можете изменить формат отображения даты с помощью CONVERT. Например, следующий будет отображать дату в коротком формате Великобритании (дд/мм/гггг)

SELECT CONVERT(varchar(50), GetDate(), 103) 

Если вы делаете это в C#, вы должны обнаружить местную культуру и отливать строку в DateTime как approporate.

//You can set the culture on the current thread: 
Thread.CurrentThread.CurrentCulture = CultureInfo.InstalledUICulture; // or new CultureInfo("en-GB"); //dd/MM/yyyy 

//or you can pass it to the DateTime.Parse method. Something like this: 
DateTime startDate = DateTime.Parse(tbStartDate.Text, CultureInfo.InstalledUICulture); 

DateTime startDate = DateTime.ParseExact(tbStartDate.Text,"dd/MM/yyyy",System.Globalization.CultureInfo.CurrentUICulture.DateTimeFormat) 
+0

В этой дате не хранится процедура, поэтому никакая броска не может быть выполнена. Я обновил вопрос с помощью строки C#, которая делает это. Приложение отлично работает при вводе 28/08/2014 на сервере в Великобритании. – dynamicuser

+0

Проблема заключается не в отображении даты, ее вставка даты. – dynamicuser

0
selP.StartDate=tbStartDate.Text.ToString("dd/MM/yyyy") 
0

Фактически функция GETDATE() возвращает системную дату и время в формате «гггг-мм-дд чч: ми: СС.ммм» независимо от формата Dateformat .Date для сервера SQL находится в США дате format MM/DD/YY, если не установлена ​​локализованная версия SQL Server, которая, как представляется, здесь. Использование

SET DATEFORMAT <format> 

, который устанавливает порядок частей даты (месяц/день/год) для ввода DateTime или smalldatetime данных. Допустимые параметры включают mdy, dmy, ymd, ydm, myd и dym. По умолчанию английское значение по умолчанию - mdy.

Этот метод позволяет использовать формат даты для дат, отправленных на SQL Server d/m/y, но зависит от соединения. Если в SQL Server добавлено новое соединение или сервер остановлен и перезапущен, формат даты вернется к dmy, который по умолчанию используется в вашем случае.

2

SQL Server не сохраняет DateTime в любом строковом формате - он хранится в виде 8-байтового численного значения.

Различные настройки (язык, формат даты) влияют только как DateTime это показано к вам в среде SQL Server Management Studio, - или, как он обрабатывается при попытке преобразовать строку в DateTime.

Существует множество форматов, поддерживаемых SQL Server - см. MSDN Books Online on CAST and CONVERT. Большинство из этих форматов зависят от настроек, которые у вас есть, поэтому эти настройки могут работать несколько раз, а иногда и нет.

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

ISO-8601 format поддерживается SQL Server поставляется в двух вариантах:

  • YYYYMMDD для всего датирует (без временной части); примечание здесь: нет тире!, это очень важно! YYYY-MM-DD is NOT независимо от настроек даты и времени на вашем SQL Server и будет NOT работать во всех ситуациях!

или:

  • YYYY-MM-DDTHH:MM:SS для даты и времени - здесь отметить: этот формат имеет дефис (но они могут быть опущены), и фиксированный T в качестве разделителя между датой и временем часть вашего DATETIME.

Это действительное для SQL Server 2000 и новее.

Если вы используете SQL Server 2008 или более поздней версии и DATE тип данных (только DATE - неDATETIME), то вы действительно можете также использовать формат YYYY-MM-DD и что будет работать тоже с любыми настройками в вашем SQL Server ,

Не спрашивайте меня, почему эта целая тема настолько сложна и несколько запутанна - так оно и есть. Но с форматом YYYYMMDD вы должны быть в порядке для любой версии SQL Server и для любого языка и параметра dateformat на вашем SQL Server.

Рекомендация для SQL Server 2008 и новее - использовать DATE, если вам нужна только часть даты, и DATETIME2(n), когда вам нужны дата и время. Вы должны попытаться поэтапно прекратить использование типа данных DATETIME

-2
SELECT CONVERT(varchar(50), GetDate(), 103) 
SELECT CONVERT(varchar(50), JoiningDate, 103)from Employee where EmpId='1001' 
+0

Можете ли вы дать какое-то объяснение? Поскольку это не ясно, как это относится к вопросу. –