Ответ 1
Формат даты по умолчанию зависит от настроек языка для сервера базы данных. Вы также можете изменить его за сеанс, например:
set language french
select cast(getdate() as varchar(50))
-->
févr 8 2013 9:45AM
Изучение 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
, это не так - кто-нибудь знает почему?
Формат даты по умолчанию зависит от настроек языка для сервера базы данных. Вы также можете изменить его за сеанс, например:
set language french
select cast(getdate() as varchar(50))
-->
févr 8 2013 9:45AM
Поддержка совместимости Говорит, что
Под уровнем совместимости 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
--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
попробуйте следующее:
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
В MS SQL Server вы можете:
SET DATEFORMAT ymd
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)
Это мое любимое использование 112 и 114 select (convert (varchar, getdate(), 112) + replace (convert (varchar, getdate(), 114), ':', '')) как 'Getdate() 112 + 114 или YYYYMMDDHHMMSSMSS'
Результат: Getdate() 112 + 114 или YYYYMMDDHHMMSSMSS
20171016083349100