使用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。