Я могу воспроизвести, SQL 2008 R2 x64.
TOP (n)
, DISTINCT
, GROUP BY
, и функции управления окнами создают дату ГГГГ-ММ-ДД.ORDER BY
нет.
Таким образом, я полагаю, что он имеет что-то, что нужно делать с катушками в базе данных tempdb, внутренними и локальными представлениями и автоматическим переключением вперед и назад, что должно происходить, но как-то не так в этом случае.
--------------------------------
-- these return Sep 4 2010
--------------------------------
SELECT (CONVERT(VARCHAR(50),CONVERT(DATE, d))) + CONVERT(VARCHAR(50), '') FROM t
SELECT (CONVERT(VARCHAR(50),CONVERT(DATE, d))) + CONVERT(VARCHAR(50), '') FROM t ORDER BY 1 ASC
SELECT (CONVERT(VARCHAR(50),CONVERT(DATE, d))) + CONVERT(VARCHAR(50), '') FROM t ORDER BY 1 DESC
--------------------------------
-- these return 2010-09-04
--------------------------------
-- GROUP BY
SELECT c FROM (SELECT (CONVERT(VARCHAR(50),CONVERT(DATE, d))) + CONVERT(VARCHAR(50), '') FROM t) t (c) GROUP BY c
-- DISTINCT
SELECT DISTINCT (CONVERT(VARCHAR(50),CONVERT(DATE, d))) + CONVERT(VARCHAR(50), '') FROM t
-- TOP (n)
SELECT TOP (5) (CONVERT(VARCHAR(50),CONVERT(DATE, d))) + CONVERT(VARCHAR(50), '') FROM t
-- COUNT(*) OVER ()
SELECT COUNT(*) OVER (), (CONVERT(VARCHAR(50),CONVERT(DATE, d))) + CONVERT(VARCHAR(50), '') FROM t
-- ROW_NUMBER() OVER ()
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 1)), (CONVERT(VARCHAR(50),CONVERT(DATE, d))) + CONVERT(VARCHAR(50), '') FROM t