2015-06-17 6 views
1

У меня есть столбец RegDatenvarchar(max) в моей таблице, в котором даты хранятся в формате mm/dd/yyyy (22/25/2012 11:09:39 PM) и dd-mm-yyyy (19-05-2015 22:55:05). Я хочу получить все эти записи в одном формате, то есть dd/mm/yyyy. Я попытался преобразовать его с помощьюКак изменить формат даты и времени?

Convert(varchar(10),cast(vr.RegDate as DATETIME),105) as RegistrationDate 

но дает следующее сообщение об ошибке:

The conversion of a nvarchar data type to a datetime data type resulted in an out-of-range value.

Пожалуйста, помогите мне об этой проблеме.

+2

Это еще еще одна причина, по которой вы всегда должны хранить свои данные с соответствующим типом данных. С какой версией сервера SQL вы работаете? –

+0

sql server 2014 – VIVEK

ответ

1

Вам необходимо определить формат конвертируемого значения, прежде чем вы сможете его преобразовать. Если это просто между этими двумя форматами, вы можете просто найти -, чтобы определить его формат.

Я хотел бы также предложить хранить значение в datetime колонке в отличие от varchar, и если вы не можете сделать это по какой-либо причине, вы должны обязательно сохранить его в формате ISO: YYYY-MM-DD HH:MM:SS.

Вот пример, который использует случай заявление, чтобы обеспечить дополнительное форматирование двух ваших форматов даты, используя присутствие - характера:

CREATE TABLE #temp (RegDate VARCHAR(50)) 

INSERT INTO #temp 
     (RegDate) 
VALUES ('5/22/2015 11:09:39 PM'), 
     ('19-05-2015 22:55:05') 

SELECT CASE WHEN CHARINDEX('-', RegDate) != 0 
      THEN CONVERT(DATETIME, RegDate, 105) 
      ELSE CONVERT(DATETIME, RegDate, 101) 
     END AS FormattedToDate 
FROM #temp 

DROP TABLE #temp 

производит:

FormattedToDate 
2015-05-22 23:09:39.000 
2015-05-19 22:55:05.000