Пожалуйста, прекрати хранения дат в виде строк и особенно как строки Unicode. Вы обеспокоены тем, что в какой-то будущей версии нашего календаря будут появляться умлауты, значки фунта, иероглифы или мандарин вместо цифр?
Срок хранения по датам. Вот для чего предназначены эти типы данных. В дополнение к тому, что вам не нужно беспокоиться о недействительных интерпретациях, вы также получаете все преимущества таких вещей, как DATEPART
и DATEADD
, и вам не нужно беспокоиться о том, чтобы кто-нибудь наполнил чушь в колонку (что-нибудь от 31/02/2012
до 'I don''t want to enter a real date'
...
в то же время, вам просто нужно использовать номер стиля с CONVERT
(это не будет надежно работать с CAST
):
SELECT CONVERT(DATETIME, '13/06/2013 09:32', 103);
чтобы заставить его работать с CAST
, вы можете установить свои LANGUAGE
или DATEFORMAT
настройки соответственно, но вы не можете сделать это insi de view, и он делает код очень хрупким, так или иначе ИМХО.
SET DATEFORMAT DMY;
SELECT CAST('13/06/2013 09:32' AS DATETIME);
Или
SET LANGUAGE BRITISH;
SELECT CAST('13/06/2013 09:32' AS DATETIME);
К очень большим отрывом, я предпочитаю дополнительный контроль CONVERT
дает вам, и почти в одностороннем порядке изменить все экземпляры CAST
к CONVERT
, даже если этот контроль не требуется, для (зачем использовать CAST
в некоторых случаях и CONVERT
, когда вам это нужно, когда вы можете просто использовать CONVERT
всегда?).
EDIT
Чтобы идентифицировать данные мусора, который пробрался в таблицу из-за выбором плохого типа данных, сделайте это (и затем исправить данные или, еще лучше, исправить тип данных, так это Безразлично Повторяется еще раз):
SET DATEFORMAT DMY;
SELECT date_column FROM dbo.table_name WHERE ISDATE(date_column) = 0;
Существует аналогичный вопрос. См. Одно из [предложений] (https://stackoverflow.com/questions/20838344/sql-the-conversion-of-a-varchar-data-type-to-a-datetime-data-type-resulted-in/ 38081347 # 38081347) это можно сделать. – Sumit