Преобразование даты и времени в сервер sql

Как я могу преобразовать формат даты и времени ниже

2010-10-25 11:13:36.700

в

25 октября 2010 г. или 25 октября 2010 г. 00:00:00.000


person Fire Hand    schedule 25.10.2010    source источник
comment
Это несложно сделать с помощью функции CONVERT(), но почти всегда лучше делать это в коде приложения, а не в sql.   -  person Joel Coehoorn    schedule 25.10.2010
comment
@Joel Coehoorn: Это при условии, что это только для презентации. Манипуляции с датами могут быть необходимы для GROUP BY или ORDER BY....   -  person OMG Ponies    schedule 25.10.2010
comment
Последний пример, это должно быть 2010 -10-25 00:00:00.000 вместо 2009 ...?   -  person Shannon Severance    schedule 25.10.2010


Ответы (5)


Чтобы получить "25-окт-2010"

Предполагая, что значение предоставляется в виде строки, а не типа данных DATETIME:

SELECT REPLACE(CONVERT(VARCHAR, CAST('2010-10-25 11:13:36.700' AS DATETIME), 106), ' ', '-')

См. документацию CAST/CONVERT для других форматов, хотя тот, который вы запросили требует постобработки.

Чтобы получить "2010-10-25 00:00:00.000"

Лучше всего использовать DATEADD и DATEDIFF:

SELECT DATEADD(d, DATEDIFF(dd, 0, '2010-10-25 11:13:36.700'), 0)

Использованная литература:

Тестирование

WITH sample AS (
   SELECT CAST('2010-10-25 11:13:36.700' AS DATETIME) dt)
SELECT REPLACE(CONVERT(VARCHAR, s.dt, 106), ' ', '-') AS col1,
       DATEADD(d, DATEDIFF(dd, 0, s.dt), 0) AS col2
  FROM sample s

Возвращает:

col1          col2
-------------------------------------
25-Oct-2010   2010-10-25 00:00:00.000

Приложение

Поскольку вы используете SQL Server 2005, вы можете упростить форматирование даты, создав функцию SQLCLR, которая позволит вам использовать форматирование даты .NET.

person OMG Ponies    schedule 25.10.2010

проверить это

SELECT convert(VARCHAR, getdate(),106)

это даст вам 25 Oct 2010

А ТАКЖЕ

SELECT REPLACE(convert(VARCHAR, getdate(),106), ' ' , '-')

это даст вам 25-Oct-2010

person Azhar    schedule 25.10.2010

Проверьте, может ли это вам помочь:

SELECT REPLACE(CONVERT(VARCHAR(11), GETDATE(), 106), ' ', '-') 

Дополнительную информацию можно получить здесь

ПД. Stackoverflow иногда может быть слишком зависимым, вы можете попробовать Google, прежде чем

person Necronet    schedule 25.10.2010

выберите КОНВЕРТ (NVARCHAR (20), getDATE (), 105)

person Vivek    schedule 25.10.2010

Пожалуйста попробуйте

    SELECT CONVERT(varchar, GETDATE(), 1)   --12/30/06
    SELECT CONVERT(varchar, GETDATE(), 2)   --06.12.30
    SELECT CONVERT(varchar, GETDATE(), 3)   --30/12/06
    SELECT CONVERT(varchar, GETDATE(), 4)   --30.12.06
    SELECT CONVERT(varchar, GETDATE(), 5)   --30-12-06
    SELECT CONVERT(varchar, GETDATE(), 6)   --30 Dec 06
    SELECT CONVERT(varchar, GETDATE(), 7)   --Dec 30, 06
    SELECT CONVERT(varchar, GETDATE(), 10)  --12-30-06
    SELECT CONVERT(varchar, GETDATE(), 11)  --06/12/30
    SELECT CONVERT(varchar, GETDATE(), 12)  --061230
    SELECT CONVERT(varchar, GETDATE(), 23)  --2006-12-30
    SELECT CONVERT(varchar, GETDATE(), 101) --12/30/2006
    SELECT CONVERT(varchar, GETDATE(), 102) --2006.12.30
    SELECT CONVERT(varchar, GETDATE(), 103) --30/12/2006
    SELECT CONVERT(varchar, GETDATE(), 104) --30.12.2006
    SELECT CONVERT(varchar, GETDATE(), 105) --30-12-2006
    SELECT CONVERT(varchar, GETDATE(), 106) --30 Dec 2006
    SELECT CONVERT(varchar, GETDATE(), 107) --Dec 30, 2006
    SELECT CONVERT(varchar, GETDATE(), 110) --12-30-2006
    SELECT CONVERT(varchar, GETDATE(), 111) --2006/12/30
    SELECT CONVERT(varchar, GETDATE(), 112) --20061230
person Md. Nazmul Nadim    schedule 06.04.2021
comment
Пожалуйста, объясните, что делает ваш код и как он это делает. - person M-Chen-3; 06.04.2021
comment
Вывод показан справа и как он работает. для получения дополнительной информации docs.microsoft.com/en-us/sql/t-sql/functions/ - person Md. Nazmul Nadim; 08.04.2021