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()