Ответы каждого замечательные, но вот один из них, я думаю, немного более полный ...
Это написано для использования javascript одного числа в одной строке:
^(?!.*911.*\d{4})((\+?1[\/ ]?)?(?![\(\. -]?555.*)\( ?[2-9][0-9]{2} ?\) ?|(\+?1[\.\/ -])?[2-9][0-9]{2}[\.\/ -]?)(?!555.?01..)([2-9][0-9]{2})[\.\/ -]?([0-9]{4})$
Если вы хотите совпадать с границами слов, просто измените ^ и $ на \ b
. Я приветствую любые предложения, исправления или критику этого решения. Насколько я могу судить, это соответствует формату NANP (для номеров США - я не проверял другие североамериканские страны при создании этого), избегает любых ошибок 911 (не может быть в коде страны или региональном коде), устраняет только те 555 номеров, которые фактически недействительны (код региона 555, за которым следует 01xx, где x = любое число).
Ваша ошибка не воспроизводима.
Следующий тест:
SELECT (CONVERT(DATE, (CONVERT(varchar, 'Oct') + ' 1 ' + CONVERT(varchar, '2017'))))
Не выдает ошибку и приводит к:
2017-10-01
Ошибка должна быть либо в другой части кода, либо из-за некоторых данных в вашей таблице за пределами того, что вы описали (действительный месяц / год)