Как я могу преобразовать это 201402110544
в date
(2014-02-11) в SQL Server 2008?Форматы даты SQL
ответ
Вы можете привести в качестве 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
.
Преобразование строк на дату - это слабость 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 лучшим вариантом в вашем случае.
Если этот формат всегда то же самое, вы можете сделать это
DECLARE @d VARCHAR(20)='201402110544'
SELECT CAST(SUBSTRING(@d,0,9) as DATETIME)
Также взгляните на The ultimate guide to the datetime datatypes, который подробно объясняет об обработке финиковые раз
, какой сервер SQL? – i486
Кроме того, чтобы быть ясным - какое значение datetime должно вносить этот вход? Существует (для * me *) одна очевидная интерпретация для этого ввода, но лучше быть ясным и конкретным в таких вещах. –
Я думаю, 11 февраля 2014 года, 5:44, но Дэмиен прав, вы должны указать формат, а также ваши dbms. –