0

使用 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% 的情况下都很好,但会错误地匹配一些不需要的日期错误格式,用户在月后放置逗号。

4

1 回答 1

0

好吧,您可以编写一个使用正则表达式调用的 CLR 函数。

顺便说一句,您当前的查询对整个日期字符串进行了替换。

如果要替换的后缀出现在月份名称中,这将成为一个问题。

例如,当我在 8 月 1 日运行您的逻辑时,如下所示:

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

我得到:

2016 年 8 月 1 日

如果您想要一个有效的非 CLR 解决方案,您可能需要通过字符在字符串中的位置来消除字符,而不是使用 REPLACE()。意思是获取后缀之前的所有字符,并将其与后缀之后的所有字符连接起来。它不会很漂亮,但就像我说的,如果你想要漂亮,你可以选择 CLR。

于 2016-09-16T15:19:33.620 回答