При работе с нестандартными форматами даты я обычно смотрю функцию CONVERT
в SQL Server, так как она очень «эластична»: вы можете предоставить ей различные форматы, чтобы она распознала их соответствующим образом.
Я использую этот сайт для справки. Там вы можете найти, что ближайший формат даты обозначен 100:
0 100 mon dd yyyy hh:miAM/PM Default
Это ваш формат, за исключением того, что он не включает ненужную в данном случае информацию о дне недели. Так что все, что вам нужно сделать, это вырезать Fri
часть:
substring(myDatetimestring, 5, 1000)
или даже лучше
substring(myDatetimeString, charindex(' ', myDatetimeString), 1000)
если часть дня недели может иметь переменную длину. Не беспокойтесь о 1000
, это только гарантирует, что у нас будет оставшаяся часть строки, не меньше.
Теперь у нас есть правильный формат даты, поскольку он говорит, что это значение по умолчанию, нам не нужно предоставлять функцию 100
для convert
, а также мы можем использовать функцию cast
вместо этого, как вы обнаружили, чтобы мы могли делать:
cast(substring(myDatetimeString, charindex(' ', myDatetimeString), 1000) as datetime)
или
convert(datetime, substring(myDatetimeString, charindex(' ', myDatetimeString), 1000), 100)
или
convert(datetime, substring(myDatetimeString, charindex(' ', myDatetimeString), 1000))