sql формат даты patindex регулярное выражение заменить отзыв
Используя SQL, существует ли элегантный способ удалить "th", "rd" и "st" после даты? Вот как я это делаю, но я бы предпочел сделать что-то вроде регулярного выражения (пример ниже).
Пожалуйста, не используйте функции с циклами 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,
Как и мой шаблон, в примере с sql могут использоваться любые два символа, за которыми следует запятая, что хорошо в 99% случаев, но не соответствует некоторым нежелательным форматам даты, когда пользователи ставят запятую после месяца.
1 ответ
Ну, вы могли бы написать функцию CLR, которая использует вызов регулярного выражения.
Кстати, ваш текущий запрос выполняет замену всей строки даты.
Это становится проблемой, если суффикс, который вы хотите заменить, присутствует в названии месяца.
Например, когда я запускаю вашу логику 1 августа, вот так:
select Replace('august 1st, 2016', Substring('august 1st, 2016', PatIndex('%[a-z,A-Z][a-z,A-Z],%', 'august 1st, 2016'), 2), '') statdate2
Я получил:
1 августа 2016 г.
Если вы хотите, чтобы решение, не относящееся к CLR, работало, вам, вероятно, нужно исключить символы по их положению в строке, а не использовать REPLACE(). То есть получить все символы до суффикса и объединить его со всеми символами после суффикса. Это не будет красиво, но, как я уже сказал, если вы хотите красивого, вы можете пойти с CLR.