Nano Hash - криптовалюты, майнинг, программирование

Изменить формат даты в SQL Server 2012

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

Когда я запускаю 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, который по-прежнему выдает ту же ошибку.


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

Ответы:


1

Правильный способ добиться этого — установить культуру вашего веб-приложения.

Как установить культуру и культуру пользовательского интерфейса для глобализации веб-страниц ASP.NET

28.08.2014
  • Отлично, я добавил ‹globalization uiCulture=en culture=en-GB /› в web.config, и все заработало. 28.08.2014

  • 2

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

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

    SQL Server поддерживает множество форматов — см. электронную документацию MSDN по CAST и CONVERT< /а>. Большинство этих форматов зависят от ваших настроек, поэтому иногда эти настройки могут работать, а иногда нет.

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

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

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

    or:

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

    Это справедливо для SQL Server 2000 и новее.

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

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

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

    28.08.2014

    3

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

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

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

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

    Если вы делаете это на С#, вам необходимо определить локальный язык и региональные параметры и привести строку к дате и времени, как это необходимо.

    //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)
    
    28.08.2014
  • Нет хранимой процедуры, вставляющей эту дату, поэтому приведение не может быть выполнено. Я обновил вопрос строкой С#, которая делает это. Приложение отлично работает при заходе 28.08.2014 на сервер в Великобритании. 28.08.2014
  • Проблема не в отображении даты, а в ее вставке даты. 28.08.2014

  • 4

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

    SET DATEFORMAT <format> 
    

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

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

    28.08.2014

    5
  • Можете ли вы дать какое-то объяснение? В нынешнем виде не очень понятно, как это относится к вопросу. 12.11.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..