SQL Server 2005: преобразование smalldatetime в varchar ведет себя по-разному в представлении и "обычном" запросе

У меня есть представление, что в основном просто возвращает все записи из таблицы и добавляет столбец "isodate", который должен быть датой в формате ISO.

CREATE VIEW [dbo].[v_bedarfe]
AS 
   SELECT *,convert(varchar(16),datum,20) As isodat FROM bedarfe
GO

Поле "datum" имеет малое время. Результаты запроса по isodat были... "удивительными", поэтому, чтобы прояснить ситуацию, я попробовал это:

select top 10 datum,isodat,convert(varchar(16),datum,20) As isodat2 from v_bedarfe

что привело к:

Снимок экрана с результатом запроса

и это выглядит очень неправильно.

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

Спасибо

Майкл
(надеюсь, что скриншот будет отображаться правильно при публикации, предварительный просмотр не показывает)

2 ответа

Решение

С помощью * во взглядах это опасно. Если определение таблицы изменяется, * может заставить представление отображать столбцы неправильно. Оставьте и воссоздайте вид без *и посмотрите, решит ли это проблему.

PS Convert 20 на самом деле является каналом ODBC, yyyy-mm-dd hh:mi:ss(24h)см. страницу MSDN.

Последний параметр преобразования - это выходной формат.

20 => гггг-мм-дд чч: ми: сс (24ч)

131 => дд / мм / гг чч: ми: сс: мммАМ

см. MS SQL convert()

Другие вопросы по тегам