2015-08-18 5 views
0

Как я могу преобразовать это 201402110544 в date (2014-02-11) в SQL Server 2008?Форматы даты SQL

+2

, какой сервер SQL? – i486

+1

Кроме того, чтобы быть ясным - какое значение datetime должно вносить этот вход? Существует (для * me *) одна очевидная интерпретация для этого ввода, но лучше быть ясным и конкретным в таких вещах. –

+1

Я думаю, 11 февраля 2014 года, 5:44, но Дэмиен прав, вы должны указать формат, а также ваши dbms. –

ответ

1

Вы можете привести в качестве DATE типа данных (https://msdn.microsoft.com/en-us/library/bb630352(v=sql.100).aspx)

SELECT CAST(datetime_value AS DATE) 

SELECT CAST(GETDATE() AS DATE) --> 2015-08-18 

Если у вас есть строка, чтобы бросить, как DATE вы можете использовать:

SELECT CAST(LEFT('201402110544', 8) AS DATE) 

Вы отсечь часть времени, принимая 1-й 8 символов (YYYYMMDD) и приведет к действительной строке для литья как DATE.

0

Преобразование строк на дату - это слабость SQL Server. CONVERT делает это, но может иметь дело только с несколькими заданными форматами. Поэтому сначала необходимо преобразовать строку в такой формат, а затем преобразовать ее на дату позже.

Один такой формат: 120 = 'yyyy-mm-dd hh: mi: ss', который, я думаю, подходит ближе всего к вашему. Для получения даты достаточно 102 = 'yyyy.mm.dd'.

convert(
    date, 
    concat(substring(datestring, 1,4), '.', 
     substring(datestring, 5,2), '.', 
     substring(datestring, 7,2)), 
    102) 
from data; 

SQL скрипку: http://www.sqlfiddle.com/#!3/9eecb7/3689

EDIT: Я стою исправлениями. Хория прав; CAST поддерживает «yyyymmdd», поэтому вы можете использовать его напрямую, просто сокращая временную часть строки. Это более читаемо, чем мое предложение выше, что делает CAST лучшим вариантом в вашем случае.

0

Если этот формат всегда то же самое, вы можете сделать это

DECLARE @d VARCHAR(20)='201402110544' 
SELECT CAST(SUBSTRING(@d,0,9) as DATETIME) 

Также взгляните на The ultimate guide to the datetime datatypes, который подробно объясняет об обработке финиковые раз