SQL日期格式patindex regex替换召回



使用SQL,是否有一种优雅的方式来删除日期后的'th' 'rd'和'st' ?下面是我的做法,但我更愿意使用类似regex recall的方法(示例如下)。

请不要使用带有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,

As-is我的模式在sql示例中可以拉入任何两个字符后面跟着一个逗号,这在99%的情况下是好的,但是不正确地匹配一些不需要的日期错误格式,用户将逗号放在月份之后。

你可以写一个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。

相关内容

  • 没有找到相关文章

最新更新