2015-10-05 2 views
2

У меня есть столбец из datetime.
Я хочу, чтобы отделить дату и время, на которое я использовал left() & right() обнесен cast() или convert(), как показано ниже:CAST() ИЛИ CONVERT() не меняет формат даты и времени на строку в SQL Server 2008

Select BATCH, 
LEFT(CAST(S_DATE AS VARCHAR(20)),12) AS ST_DATE, 
RIGHT(CAST(S_DATE AS VARCHAR(20)),8) AS ST_TIME, 
LEFT(CAST(E_DATE AS VARCHAR(20)),12) AS E_DATE, 
RIGHT(CAST(E_DATE AS VARCHAR(20)),8) AS E_TIME 
INTO CRYST2 
From Z_BATCH; 

это мой фактический формат для datetime колонки: -

2015-10-01 14:00:00.000 

Но проблема заключается в том, что он точно определяет дату и время, но не возвращает результат в форме строки, так как сам вывод обращается к дате & в формате времени соответственно в их соответствующие столбцы. Ниже выходной я получаю: -

1 Oct 1 2015  2:00PM Oct 1 2015  2:30PM 

Как вы можете ясно видеть столбцы я отделенные после даты-времени для преобразования строки по-прежнему дает мне выход только в некоторых дата-время формат. прошу помочь.

+0

Не отбрасывать в datetime в varchar. Вместо этого используйте dateadd и датифик, чтобы получить полночь даты или когда-либо датировать, чтобы получить разные части даты. –

+0

@ ZoharPeled, вы хотите сказать, что первая отдельная дата-часть из формата даты-времени? означает отдельный год, месяц и дату отдельно, а затем объединить их? – prateek

+0

OKI GOT IT !! CONVERT (дата, S_DATE), CONVERT (TIME, S_DATE) IT дала желаемый output.thanx все !! – prateek

ответ

0

В ролях Дата и время в точном формате, как:

CAST(S_DATE AS Time) AS ST_TIME 
CAST(S_DATE AS Date) AS ST_Date 

вернется:

14:00:00 
2015-10-01 
+0

CONVERT (дата, S_DATE) этот тоже дал мне желаемый выход, спасибо в любом случае !! – prateek

+0

Да, конечно, вы можете использовать двойной синтаксис .. –

0

Использование CONVERT с форматом 120, чтобы получить желаемый результат, всегда возвращают формат yyyy-MM-dd hh:mm:ss

CONVERT(varchar(20), S_DATE, 120) 
+0

CONVERT (date, S_DATE) этот тоже дал мне желаемый выход, в любом случае! – prateek

0

Вы можете попробовать это, если вы хотите получить результаты в формате строки:

select convert(varchar(11),cast(S_DATE as date),106) 
select convert(varchar(11),cast(S_DATE as time),100) 

Если вы пытаетесь получить ответы на дату и формат времени, попробуйте следующее:

CAST(S_DATE AS Time) AS ST_TIME 
CAST(S_DATE AS Date) AS ST_Date 
1

это мой фактический формат DateTime колонка:

2015-10-01 14: 00: 00,000

нет, это не так. Значение datetime не имеет формата вообще, оно представляет собой только точку во времени. Он только получает формат, когда вы конвертируете его в строку.

Вы не указываете какой-либо формат вообще при преобразовании значений даты и времени, поэтому он будет использовать формат по умолчанию (0). Вы можете использовать формат, в котором значения даты и времени отображались как (121), чтобы получить желаемый результат:

Select BATCH, 
LEFT(CAST(S_DATE AS VARCHAR(19),121),10) AS ST_DATE, 
RIGHT(CAST(S_DATE AS VARCHAR(19),121),8) AS ST_TIME, 
LEFT(CAST(E_DATE AS VARCHAR(19),121),10) AS E_DATE, 
RIGHT(CAST(E_DATE AS VARCHAR(19),121),8) AS E_TIME 
INTO CRYST2 
From Z_BATCH; 
+0

[и для более подробного чтения (и самостоятельного продвижения: -))] (http://stackoverflow.com/questions/30032915/how-to-cast-the-datetime-to-time/30033028#30033028) –

Смежные вопросы