Member 10028394 Ответов: 3

Дата начала и дата окончания отображаются в представлении SQL server как одно поле


Я хочу создать представление в SQL server и показать дату начала и дату окончания в виде одного столбца в этом представлении, как это возможно, я попробовал код, приведенный ниже, и выдал ошибку " дата и varchar несовместимы в операторе add"
Мой второй вопрос заключается в том, что в виду использования ключа primery

Что я уже пробовал:

CREATE VIEW [V_SalesReportLocked] AS
SELECT SRLID, DateFrom+' To'+ DateTo
FROM Reports.SalesReportLocked
WHERE IsActive = 1 and IsClosed=0

3 Ответов

Рейтинг:
2

Wendelius

Как уже упоминалось ранее, при преобразовании данных в varchar вы можете объединить столбцы.

Однако я бы не советовал форматировать данные таким образом в SQL-запросе. Основываясь на сообщении об ошибке первичного ключа, вы используете EF. Если это правильно, то лично я предпочел бы ввести столбцы в качестве полей datetime в модель, а затем добавить вычисляемые поля в сущность, чтобы показать даты в нужном формате. Другими словами, форматирование будет выполняться на стороне клиента.

Причина этого заключается в том, что SQL не предназначен для форматирования данных, основное использование-манипулирование данными и их извлечение. Другое дело, что если форматирование зависит от настроек на стороне клиента, то их нужно учитывать при построении SQL-оператора. Например, преобразование потребует различных параметров, если дата должна быть ДД.ММ.гггг или если она должна быть ММ/ДД / гггг. Я считаю, что сделать преобразование и конкатенацию на стороне клиента было бы проще.

Что же касается ошибки 6002. Если вы выполняете форматирование на стороне клиента, вы можете получить данные непосредственно из базовой таблицы. В таком случае вы больше не получите ошибку, если в таблице есть действительный первичный ключ.

Если вы хотите использовать вид, то у вас есть несколько возможностей
- сообщение, вероятно, является предупреждением, поэтому, поскольку вы все равно не собираетесь обновлять представление, вы можете игнорировать это предупреждение
- добавьте сгенерированное уникальное значение в представление и определите его как ключ в модели. Один из способов создания ценности-использовать ROW_NUMBER (Transact-SQL)[^]


Рейтинг:
2

OriginalGriff

Для этого вам нужно сообщить SQL, в каком формате вы хотите видеть свои даты: Функция SQL Server CONVERT() [^]- используйте это на обеих датах, чтобы изменить их на форматированные строки NVARCHAR, и это будет работать.


Рейтинг:
1

RickZeeland

Грифф снова избил меня :)
Я согласен, CONVERT(varchar, DateFrom) должно сработать, вот онлайн-пример: Скрипка SQL[^]


Member 10028394

я стараюсь и теперь это работает нормально
изменить вид [V_SalesReportLocked] как
Выберите SRLID, CustomerAccountID, (cast(DateFrom as varchar(50)) + ' To '+ cast(DateTo as varchar(50)) как LocDate
из докладов.SalesReportLocked
Где IsActive = 1 и IsClosed=0
ЗАКАЗ ПО SRLID АЛФАВИТУ
СМЕЩЕНИЕ 0 СТРОК

мой второй вопрос это ошибка в визуальной студии произошел приведенный ниже
"Ошибка 6002: представление "V_SalesReportLocked" не имеет определенного первичного ключа"
Любезно сообщил мне решение вышеупомянутой ошибки