Вы не можете установить выходной формат даты и времени в самой дате.
Если вам нужно вывести дату и время в формате char / varchar, вам нужно использовать функцию convert при выборе данных:
SELECT CONVERT(char(10), CURRENT_TIMESTAMP, 101) -- format: MM/dd/yyyy
SELECT CONVERT(char(10), CURRENT_TIMESTAMP, 103) -- format: dd/MM/yyyy
В вашем случае:
SELECT @DateMin AS a, CONVERT(char(10), @DateMin, 103) AS b
Это работает, как ожидалось.
Если вы хотите иметь изменяемый тип данных, вам нужно объявить его как sql_variant:
DROP TABLE IF EXISTS #t;
CREATE TABLE #t(DateMin sql_variant);
INSERT INTO #t VALUES ('2019-01-13T00:00:00')
UPDATE #t SET DateMin = FORMAT(CAST(DateMin AS datetime), 'dd''/''MM''/''yyyy');
SELECT * FROM #t;
Кроме того, ваше форматное выражение должно явно ставить / в кавычки,aka 'dd''/''MM''/''yyyy'
, иначе sql-server заменяет его разделителем даты, характерным для текущей культуры, который в моем случае будет .
.
Просто используйте вместо этого команду convert 103, она работает на всех версиях sql-сервера и, вероятно, быстрее.
Кроме того, ваш оператор вставки завершается ошибкой в некоторых версиях sql-сервера, потому что iso-date-format2019-01-13T00:00:00
, а не 2019-13-01 00:00:00
Правильное значение:
INSERT INTO #t VALUES ('2019-01-13T00:00:00')
![SQL-server end of support](https://i.stack.imgur.com/ZcGqX.png)
Также
DROP TABLE IF EXISTS #t;
только для sql-server 2016+, в противном случае вам нужно
IF OBJECT_ID('tempdb..#t') IS NOT NULL DROP TABLE #t
И после sql-server 2005 вы должны использовать datetime2 вместо datetime. Вы не должны больше использовать datetime, потому что datetime использует float, и, как таковое, неточно - если вы вставите iso значение datetime, это может сделать забавные вещи из-за float-point-machine-epsilon, например, установить его на следующий деньесли у вас есть 23: 59: 59,999, просто как страшный пример.
Советую никогда не использовать тип sql_variant . Если у вас есть временная таблица с определенными столбцами, просто создайте другой столбец, в который вы будете записывать значение char / varchar.