У меня есть представление в SQL Server 2012, и есть столбец с датами и временем. Я пытался преобразовать столбец даты в формат '20.10.2018 18:00' (без секунды), используя эту функцию и множество подходов на Stackoverflow и других веб-сайтах:
FORMAT(StartDate, 'dd.mm.yyyy hh:mm')
Однако, поскольку тип данных этого столбца - Varchar (String), а не DateTime, я столкнулся с некоторыми проблемами на стороне C# и хочу выполнить это преобразование на стороне базы данных без изменения типа данных сгенерированного формата). Есть ли способ добиться этого?
Вы пытаетесь дд. {Минут} .yyyy попробуйте FORMAT (StartDate, 'dd.MM.yyyy hh: mm') HH для 24-часового формата
Типы данных Date и time не имеют формата. Если вам нужна отформатированная дата, вам понадобится varchar. Что вам следует сделать, так это передать значение в виде datetime вашему приложению, а затем отформатировать данные на уровне представления. Затем ваше приложение сможет обрабатывать данные как datetime и отображать их в формате, подходящем для вашего бизнеса.
@SeanLange Я просто хочу отображать данные, и нет проблем с форматированием данных во время списка вместо редактирования данных.
Я не понимаю вашего последнего комментария.
@JohnCappelletti Есть ли в этом смысл? Будет ли это по-прежнему nvarchar (строка) вместо DateTime?
Чтобы использовать FORMAT, вам сначала нужно преобразовать вашу строку в дату и время, а затем отформатировать ее. Но на самом деле проблема в типе данных. sqlblog.org/2009/10/12/…
Строка - это строка, а дата - это дата. Нет "формата даты"
Ни один из SQL Server ни C# не связывает формат отображения с DATETIME / DateTime. Это всего лишь число под крышкой, и то, как эти числа отображаются, зависит от клиента (ов) - Management Studio, Console.WriteLine и всего, с чем у вас сейчас проблемы. Посмотрите, что обрабатывает значения даты / времени и как вы настраиваете это, чтобы отображать вещи по-другому.
Даты в таком формате, как правило, конвертируются на клиентах в зависимости от региональных настроек - если вы передаете их в виде строки, вы можете захотеть посмотреть на преобразование в формат iso8601, но вам нужно будет надежно преобразовать вашу строку даты в свидание первым. пример SELECT CONVERT (VARCHAR (33), GETDATE (), 126)
Большое спасибо за вашу помощь, я признателен за ваши ценные комментарии ... С другой стороны, не могли бы вы прояснить мне следующие проблемы, чтобы решить проблему с помощью лучшего решения для этого сценария ??? >>>
Я думаю, что один из лучших способов для меня - это форматирование DateTime как строки в конфигурации ViewModel или AutoMapper, но второй вариант не работает. Для стороны ViewModel я думаю использовать строку для поля DateTime, но я не уверен, будет ли это проблемой, поскольку свойство в файле model.ts имеет тип Date. Итак, как насчет создания дополнительного параметра в ViewModel и преобразования и форматирования моего значения DateTime в виде строки ??? Это самый подходящий сценарий для меня ???
@Cato Вы смотрели мой последний комментарий?
Не совсем уверен, с чем вам нужна помощь. Даже не уверен, что вы пытаетесь сделать. Единственное, что я знаю наверняка, это то, что вы не должны хранить даты как varchar.


SQL Server не имеет "формата даты" как такового. Форматирование полей даты и времени выполняется только при представлении даты и времени на выходе, то есть при преобразовании ее в строку.
Существует формат по умолчанию для презентации, который контролируется настройками сопоставления сервера. Однако внутри дата хранится как числовое значение (фактический формат зависит от типа, поскольку datetime и datetime2 имеют разные внутренние форматы), и это значение не имеет связанного форматирования.
Вы можете сохранить дату без секунд, используя поле smalldatetime или управляя входными данными, чтобы обрезать значение секунд. Но, если вы не сохраните дату в виде строки, которая является абсолютно не рекомендуется, вы не сможете сохранить выходной формат, отличный от формата, управляемого сопоставлением по умолчанию, в поле даты и времени.
Большое спасибо всем участникам и ответам. В этом случае я должен выполнять операции форматирования на стороне программы, а не на стороне базы данных. С Уважением...
Большое спасибо за ответ. На самом деле для меня одним из лучших способов является форматирование DateTime как строки в конфигурации ViewModel или AutoMapper, но второй вариант не работает. Для стороны ViewModel я думаю использовать строку для поля DateTime, но я не уверен, будет ли это проблемой, поскольку свойство в файле model.ts имеет тип Date. Итак, как насчет создания дополнительного параметра в ViewModel и преобразования и форматирования моего значения DateTime в виде строки ??? Это самый подходящий сценарий для меня ???
Если возможно, я бы перенес этот столбец на datetime (или другой вариант). В качестве альтернативы, если это повлияет на слишком много вещей, вы можете создать вычисляемый столбец в таблице, который преобразует имеющуюся строку даты в datetime. Таким образом, базе данных вообще не нужно заботиться о форматировании; он просто работает с правильным типом данных DateTime.
Если ни один из этих вариантов не подходит, вы можете просто передать строку в C# и использовать DateTime.TryParse() для преобразования ее в объект C# DateTime.
В любом случае предпочтительно работать с датой как с DateTime до самой последней минуты, когда вам нужно отформатировать ее для отображения где-нибудь.
Большое спасибо за ответ. На самом деле для меня одним из лучших способов является форматирование DateTime как строки в конфигурации ViewModel или AutoMapper, но второй вариант не работает. Для стороны ViewModel я думаю использовать строку для поля DateTime, но я не уверен, будет ли это проблемой, поскольку свойство в файле model.ts имеет тип Date. Итак, как насчет создания дополнительного параметра в ViewModel и преобразования и форматирования моего значения DateTime в виде строки ??? Это самый подходящий сценарий для меня ???
Проблема в том, что вы храните даты в виде строк. Это плохой подход. Также имейте в виду, что при использовании FORMAT на выходе получаются строковые данные. Если вы хотите отформатировать данные в клиенте определенным образом, вы должны заставить базу данных отправлять данные как дату и время и выполнять форматирование во внешнем интерфейсе.