2016-09-16 2 views
0

Используя SQL, есть ли элегантный способ удалить 'th' 'rd' и 'st' после даты? Вот как я это делаю, но я бы скорее сделал что-то вроде напоминания регулярного выражения (пример ниже).sql date format patindex regex заменить отзыв

Пожалуйста, не используйте функции с циклами while. Я уже видел эти решения, и я ищу что-то менее уродливое.

select Replace('september 8th, 2016', Substring('september 8th, 2016', PatIndex('%[a-z,A-Z][a-z,A-Z],%', 'september 8th, 2016'), 2), '') statdate2 

при использовании отзыва я мог бы сделать что-то вроде ниже

/(\s[0-9]+)[a-z,A-Z]{2}\,/ 

и вспомнить, что число дата с заменой

$1, 

Как-моя модель Inthe SQL, например, может потянуть в любом двух символах, за которым следует запятая, что составляет 99% от времени, но неправильно соответствует некорректным неправильным датам, когда пользователи помещают запятую после месяца.

ответ

0

Ну, вы можете написать функцию CLR, которая использует вызов regex.

Кстати, ваш текущий запрос заменяет всю строку даты.

Это становится проблемой, если суффикс, который вы хотите заменить, присутствует в имени месяца.

Например, когда я запускаю свою логику на 1 августа, как это:

select Replace('august 1st, 2016', Substring('august 1st, 2016', PatIndex('%[a-z,A-Z][a-z,A-Z],%', 'august 1st, 2016'), 2), '') statdate2 

я получаю:

AUGU 1, 2016

Если вы хотите не- CLR, вы, вероятно, должны устранить символы по их позиции в строке, вместо использования REPLACE(). Значение получает все символы перед суффиксом и объединяет его со всеми символами после суффикса. Это будет не очень красиво, но, как я уже сказал, если вы хотите красиво, вы можете пойти с CLR.

+0

спасибо, да, я хочу избежать CLR. BTW, я запустил sql в SQL Mgmt Studio и заменил суффикс числа. –

+0

Это действительно то, что нужно обрабатывать в интерфейсе. SQL не предназначен для такого рода работ. –

+0

Согласен, но я не контролирую переднюю часть. –