ФОРМАТ DATETIME SQL SERVER - программирование
Подтвердить что ты не робот

ФОРМАТ DATETIME SQL SERVER

Изучение SQL Server есть что-то, о чем я не уверен:

A datetime со значением: 2012-02-26 09:34:00.000

Если я выберу из таблицы, используя:

CAST(dob2 AS VARCHAR(12) ) AS d1

Он форматирует его как: Feb 26 2012

Что я не уверен в том, как и почему SQL Server форматирует DateTime как это. Если вы используете datetime2, это не так - кто-нибудь знает почему?

4b9b3361

Ответ 1

Формат даты по умолчанию зависит от настроек языка для сервера базы данных. Вы также можете изменить его за сеанс, например:

set language french
select cast(getdate() as varchar(50))
-->
févr 8 2013 9:45AM

Ответ 2

Поддержка совместимости Говорит, что Под уровнем совместимости 110 стиль по умолчанию для операций CAST and CONVERT в типах time и datetime2 всегда равен 121. Если ваш запрос зависит от старого поведения, используйте уровень совместимости менее 110 или явно укажите стиль 0 в затронутом запросе.

Это означает, что по умолчанию datetime2 составляет от CAST as varchar до 121 format. Для ex; col1 и col2 форматы (ниже) одинаковы (кроме 0s в конце)

SELECT CONVERT(varchar, GETDATE(), 121) col1,
       CAST(convert(datetime2,GETDATE()) as varchar) col2,
       CAST(GETDATE() as varchar) col3

SQL FIDDLE DEMO

--Results
COL1                    | COL2                          | COL3
2013-02-08 09:53:56.223 | 2013-02-08 09:53:56.2230000   | Feb 8 2013 9:53AM

FYI, если вы используете CONVERT вместо CAST, вы можете использовать третий параметр для указания определенных форматов, перечисленных здесь, на MSDN

Ответ 3

попробуйте следующее:

select convert(varchar, dob2, 101)
select convert(varchar, dob2, 102)
select convert(varchar, dob2, 103)
select convert(varchar, dob2, 104)
select convert(varchar, dob2, 105)
select convert(varchar, dob2, 106)
select convert(varchar, dob2, 107)
select convert(varchar, dob2, 108)
select convert(varchar, dob2, 109)
select convert(varchar, dob2, 110)
select convert(varchar, dob2, 111)
select convert(varchar, dob2, 112)
select convert(varchar, dob2, 113)

refernces: http://msdn.microsoft.com/en-us/library/ms187928.aspx

http://www.w3schools.com/sql/func_convert.asp

Ответ 4

В MS SQL Server вы можете:

SET DATEFORMAT ymd

Ответ 5

case when isdate(inputdate) = 1 
then convert(datetime, cast(inputdate,datetime2), 103)
else
case when isdate(inputdate) = 0 
then convert(datetime, cast(inputdate,datetime2), 103)

Ответ 6

Это мое любимое использование 112 и 114 select (convert (varchar, getdate(), 112) + replace (convert (varchar, getdate(), 114), ':', '')) как 'Getdate() 112 + 114 или YYYYMMDDHHMMSSMSS'

Результат: Getdate() 112 + 114 или YYYYMMDDHHMMSSMSS

20171016083349100